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

哪些浏览器支持这个功能? 哪些浏览器版本支持此功能? 重写函数的危险是什么?


当前回答

现代浏览器中的所有JavaScript实现都支持重写。

危险很简单,如果您重写了诸如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);

我遇到过一个要求,即在显示实际警报消息的同时显示默认消息。这就是我如何做到的。


    const actualAlertFunc = window.alert;
    window.alert = function(msg) {
         actualAlertFunc('some default message '+ msg);
    }

我已经在chrome上测试过了。 我不确定这是否是一种好的做法,但它达到了目的。

它绝对是“支持的”。这是你的网页,你想做什么就做什么。

我已经这样做了,在不修改库的情况下跟踪分析事件,但通过潜入事件。

使用代理模式:

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

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

更多信息:JQuery类型#代理模式

我做的一个快速破解来找到警报来自哪里,是去控制台,然后输入这个

function alert(message) { 
  console.info(message);
  debugger;
} 

超铃报警功能无危险。每个浏览器都支持它。

例如:

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

alert('This is an override.');