JavaScript: Overovering alert()
2022-08-30 01:14:22
有没有人有过在JavaScript中重写该函数的经验?alert()
- 哪些浏览器支持此功能?
- 哪些浏览器版本支持此功能?
- 覆盖该函数有哪些危险?
有没有人有过在JavaScript中重写该函数的经验?alert()
它绝对是“支持的”。它是你的网页,你可以用它做任何你想做的事情。
我已经这样做了,以跟踪分析事件,而无需修改库,而是通过潜入事件。
使用代理模式:
(function(proxied) {
window.alert = function() {
// do something here
return proxied.apply(this, arguments);
};
})(window.alert);
如果需要,还可以绕过对原始函数的调用(代理)
更多信息请点击这里: JQuery 类型#Proxy模式
尽管大多数浏览器都支持覆盖它,但要小心你正在使用它做什么。
由于默认警报框会阻止执行线程,因此依赖于此行为的某些库可能不再起作用(充其量)。
你应该是一个好公民,避免接触原生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);