alert()
JavaScript로 함수 를 재정의 한 경험이 있습니까?
- 이를 지원하는 브라우저는 무엇입니까?
- 어떤 브라우저 버전이이를 지원합니까?
- 함수를 재정의 할 때 어떤 위험이 있습니까?
_alert
의 종류 등 의 expando 첫 번째 인스턴스에서 온도를.
alert()
JavaScript로 함수 를 재정의 한 경험이 있습니까?
_alert
의 종류 등 의 expando 첫 번째 인스턴스에서 온도를.
답변:
확실히 "지원"됩니다. 그것은 당신의 웹 페이지이며, 당신이 원하는 것은 무엇이든합니다.
이미 라이브러리를 수정하지 않고 이벤트를 몰래 분석 이벤트를 추적하기 위해이 작업을 수행했습니다.
프록시 패턴을 사용하십시오.
(function(proxied) {
window.alert = function() {
// do something here
return proxied.apply(this, arguments);
};
})(window.alert);
원하는 경우 원래 기능에 대한 호출을 무시할 수도 있습니다 (프록시).
자세한 정보는 여기 : JQuery 유형 # 프록시 패턴
apply()
에서는 사용할 수 없습니다.window.alert
apply
의 방법입니다 Function
. 그래서 그들은 그것을 명시 적으로 제한해야 alert
합니까?!
대부분의 브라우저는 재정의를 지원하지만 사용중인 작업에주의하십시오.
기본 경고 상자가 실행 스레드를 차단하므로이 동작에 의존하는 일부 라이브러리는 더 이상 작동하지 않을 수 있습니다.
당신은 좋은 시민이어야하고 네이티브 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.');
alert("Reloading")
웹 페이지 를 호출 한 다음 다시로드하는 코드입니다 . 경고 텍스트가 사용자에게 표시되지 않을 수 있습니다.
다른 많은 답변에서 언급했듯이 함수를 재정의 할 수 있습니다.
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);
파이어 폭스와 ie8에서 작동합니다. 작동하지 않는 브라우저가 있다는 것을 알 수 없습니다. 이것은 자바 스크립트가 작동하는 방법의 근본입니다.