[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를 정의했습니다.
테스트 목적으로 만 사용되었으며 나중에 정식 버전을 구입했기 때문에 부도덕 한 일이 없습니다. 😉