包含特定字符串时覆盖警告框

时间:2014-10-27 08:21:10

标签: javascript jquery override alert

我希望在包含特定字符串时覆盖警告框的样式,否则保留为默认字符串。我已尝试控制日志记录,因此我可以将if条件放入,但响应的方式如下:

function alert() { [native code] }

当我尝试了以下不同的东西时:

window.old_alert = window.alert;
window.alert = function(message){
  console.log(message);
  alert(message);
}

我在控制台中收到警告消息,但由于未知原因,它会超过1000次冻结我的浏览器,并且窗口中没有任何弹出窗口。这应该如何处理?任何帮助或指导都非常受欢迎。

3 个答案:

答案 0 :(得分:3)

window.old_alert = window.alert;
window.alert = function(message){
  console.log(message);
  alert(message); //THIS called the new alert recursively, hence the freeze
}

您想要做的是:

window.oldAlert = window.alert;
window.alert = function(message) {
    var SpecificString="test";
    if(message.indexOf(SpecificString) >= 0) {
        console.log(message);
    } else {
        window.oldAlert(message);
    }
}

Here's a jsfiddle

答案 1 :(得分:1)

您刚刚使用该代码进行了无限递归!

window.old_alert = window.alert;
window.alert = function(message){
    console.log(message);
    alert(message); // this calls your modified alert causing an infinite recursion
}

您需要的是:

window.old_alert = window.alert;
window.alert = function(message){
    if(message === "some special string") my_new_alert(message); // call special alert
    else old_alert(message); // this calls the original alert
}
..
my_new_alert = function(message) {
    // modified alert UI
}

答案 2 :(得分:1)

您可以像这样覆盖alert,但无法更改警告框的默认样式。如果您需要不同的样式警报,则需要使用自己的弹出对话框。

  var old_alert = window.alert;

  window.alert = function() {
    console.log(arguments[0]);
    return old_alert.apply(this, arguments);
  };