[javascript] JavaScript : alert () 재정의

alert()JavaScript로 함수 를 재정의 한 경험이 있습니까?

  • 이를 지원하는 브라우저는 무엇입니까?
  • 어떤 브라우저 버전이이를 지원합니까?
  • 함수를 재정의 할 때 어떤 위험이 있습니까?


답변

확실히 “지원”됩니다. 그것은 당신의 웹 페이지이며, 당신이 원하는 것은 무엇이든합니다.

이미 라이브러리를 수정하지 않고 이벤트를 몰래 분석 이벤트를 추적하기 위해이 작업을 수행했습니다.

프록시 패턴을 사용하십시오.

(function(proxied) {
  window.alert = function() {
    // do something here
    return proxied.apply(this, arguments);
  };
})(window.alert);

원하는 경우 원래 기능에 대한 호출을 무시할 수도 있습니다 (프록시).

자세한 정보는 여기 : JQuery 유형 # 프록시 패턴


답변

대부분의 브라우저는 재정의를 지원하지만 사용중인 작업에주의하십시오.

기본 경고 상자가 실행 스레드를 차단하므로이 동작에 의존하는 일부 라이브러리는 더 이상 작동하지 않을 수 있습니다.

당신은 좋은 시민이어야하고 네이티브 API를 건드리지 마십시오. 그렇게하면 타사 코드를 사용할 때 문제가 발생할 수 있습니다.

그러나 특정 상황에서 경고 동작을 재정의하려면 다음과 같이 익명 함수로 경고 동작을 묶을 수 있습니다.

/* new funky alert */
function myFunkyAlert(msg) {
    /* here goes your funky alert implementation */
    alert("Look ma!\n" + msg);
}

(function(alert) { // anonymous function redefining the "alert"

    /* sample code */
    alert("Hello World!");

})(myFunkyAlert);


답변

경고 경고 기능에는 위험이 없습니다. 모든 브라우저가이를 지원합니다.

예를 들면 다음과 같습니다.

// function over riding. Redirecting to Console with Firebug installed.
function alert(message) {
    console.info(message);
}

alert('This is an override.');


답변

모든 Javascript 구현이이를 지원할 것이라고 생각하며 관련된 위험은 없습니다. 일반적으로 일반 OS 스타일의 경고 상자를 HTML / CSS와 함께보다 우아한 것으로 대체합니다. 이렇게하면 기존 코드를 변경할 필요가 없습니다! 가능하다는 사실은 Javascript를 최고로 만듭니다.


답변

다른 많은 답변에서 언급했듯이 함수를 재정의 할 수 있습니다.

window.alert = null

또는

window.alert = function(){}

그러나 이것은 Window생성자 의 프로토 타입 (자본에주의하십시오 W) 의 함수를 반드시 재정의 할 필요는 없으므로 해커는 여전히 다음을 입력 할 수 있습니다.

Window.prototype.alert.apply(window, ["You were hacked!"]);

따라서 다음을 사용하여 해당 기능을 재정의해야합니다.

Window.prototype.alert = null

또는

Window.prototype.alert = function(){}


답변

라디 슬라 프.
IE8의 경우 다음과 같이 alert ()을 재정의 할 수 있습니다

/**
 * Definition of global attached to window properties <br/>
 */
    (function() {
      nalert = window.alert;
      Type = {
          native: 'native',
          custom: 'custom'
      };
    })();

/**
 * Factory method for calling alert().
 * It will be call a native alert() or a custom redefined alert() by a Type param.
 * This defeinition need for IE
 */
    (function(proxy) {

          proxy.alert = function () {
          var message = (!arguments[0]) ? 'null': arguments[0];
          var type = (!arguments[1]) ? '': arguments[1];

          if(type && type == 'native') {
           nalert(message);
          }
          else {
               document.write('<h1>I am redefiend alert()<br/>Alert say: '+message+'</h1>');
          }
      };
   })(this);

로 전화

alert('Hello, hacker!');
nalert('I am native alert');
alert('Hello, user!', Type.custom);


답변

alert () 함수를 재정의 한 경험은 “등록하십시오!”라는 JavaScript 라이브러리의 평가판을 “해킹”하는 데 사용한 적이 있다는 것입니다. 경고 시간을 통해 화면을 비 웁니다.

방금 자체 alert () 함수와 voila를 정의했습니다.

테스트 목적으로 만 사용되었으며 나중에 정식 버전을 구입했기 때문에 부도덕 한 일이 없습니다. 😉