JavaScript: Overovering alert()

2022-08-30 01:14:22

有没有人有过在JavaScript中重写该函数的经验?alert()

  • 哪些浏览器支持此功能?
  • 哪些浏览器版本支持此功能?
  • 覆盖该函数有哪些危险?

答案 1

它绝对是“支持的”。它是你的网页,你可以用它做任何你想做的事情。

我已经这样做了,以跟踪分析事件,而无需修改库,而是通过潜入事件。

使用代理模式:

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

如果需要,还可以绕过对原始函数的调用(代理)

更多信息请点击这里: JQuery 类型#Proxy模式


答案 2

尽管大多数浏览器都支持覆盖它,但要小心你正在使用它做什么。

由于默认警报框会阻止执行线程,因此依赖于此行为的某些库可能不再起作用(充其量)。

你应该是一个好公民,避免接触原生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);