JavaScript의 함수 하이재킹 예제에 대한 자세한 설명

小云云
풀어 주다: 2018-03-16 17:34:17
원래의
1824명이 탐색했습니다.


함수 하이재킹은 이름에서 알 수 있듯이 함수가 실행되기 전에 함수를 하이재킹하여 원하는 기능을 추가합니다. 이 함수가 실제로 실행되면 더 이상 원래의 함수가 아니고 우리가 추가한 함수를 갖게 됩니다. 이는 또한 일반적인 후크 기능의 원칙 중 하나입니다.
얼핏 보면 이는 함수를 다시 작성한 것처럼 보입니다. 함수 재작성도 일종의 함수 하이재킹으로 이해될 수 있는데 이 방법은 너무 역겹다. 납치범으로서 납치로 인해 이익을 얻은 후 직업 윤리를 준수하고 사람을 그대로 돌려 보내야하므로 적절한 위치에 기능의 원래 기능을 다시 호출해야합니다.
실제로 우리는 '하이재킹'이라는 개념을 자주 접하게 됩니다. 예를 들어 웹사이트가 운영자에 의해 하이재킹되면 웹사이트를 탐색할 때 운영자의 광고가 팝업됩니다.

예제

이제 간단한 예를 들어 보겠습니다. Alert() 함수를 하이재킹하고 여기에 약간의 기능을 추가해 보겠습니다.

let warn = alertwindow.alert = (t) => {    if (confirm('How are you?')) warn(t)
}

alert('Help me...!!!')
로그인 후 복사

개발자 도구를 열고 이 예를 시도해 보면 당신만이 확인하는 유일한 사람이라는 것을 알게 될 것입니다. 확인을 클릭하면 도와주세요...!!!가 나타납니다.
다음으로 콘텐츠의 이 부분을 일반 함수로 캡슐화합니다.

const hijack = (obj, method, fun) => {
  let orig = obj[method]
  obj[method] = fun(orig)
}
로그인 후 복사

먼저 원래 함수를 저장한 다음 사용자 정의 함수를 실행하는 하이재킹 함수를 정의합니다. 그러면 원래 함수는 사용자 정의 내부에서 호출을 수행합니다. 기능.
그런 다음 verify() 함수를 하이재킹해 보겠습니다.

hijack(window, 'confirm', (orig) => {  return (text) => {
    alert('HELP ME PLZ!!!')    if (orig.call(this, text)) {
      alert('YOU SEEMS FINE AND I AM LEAVING, GOOD BYE!')
    } else {
      alert('HOLD ON! I AM COMING!!')
    }
  }
})
로그인 후 복사

이 함수의 기능은 매우 간단하므로 자세히 설명하지 않겠습니다. 단지 verify()를 호출하면 다음을 알 수 있습니다.

도용 방지

만들기 새 페이지를 열고 개발을 엽니다. 도구 콘솔로 이동하여 경고를 입력하면 다음과 같은 출력이 표시됩니다.

function alert() { [native code] }
로그인 후 복사

그런 다음 이 문서의 시작 부분에 있는 코드를 사용하여 경고()를 하이재킹하고 콘솔에 다시 경고를 입력합니다. 다음과 같은 출력이 표시됩니다.

function (t) => {    if (confirm('How are you?')) warn(t)
}
로그인 후 복사

위의 예에서 함수가 하이재킹되었는지 확인하려면 함수를 직접 인쇄하기만 하면 된다는 것을 알 수 있습니다. 시스템 고유 기능의 경우 [네이티브 코드]는 순수하고 오염이 없음을 의미합니다.

관련 권장사항:

Javascript 함수 하이재킹에 대한 간략한 토론 [xfocus에서 다시 게시]_javascript 기술

위 내용은 JavaScript의 함수 하이재킹 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿