禁用警报消息

时间:2018-03-21 05:14:31

标签: javascript

如何在页面上禁用某些警报并允许其他人?

我尝试使用此代码:

window.alert = function ( text ) {
   console.log(text); 
   if(!text.includes("rambo"))
      alert("rambo"); 
};

这不起作用,因为它再次调用警报而不是警报。

我需要使用javascript警报(不是任何其他库)

4 个答案:

答案 0 :(得分:15)

首先保存对旧window.alert的引用。

const oldAlert = window.alert;
window.alert = function ( text ) {
  console.log(text); 
  if(!text.includes("rambo"))
    oldAlert(text); 
  return true;
};

window.alert('ram');
window.alert('rambo');

答案 1 :(得分:4)

其他两个答案大多是正确的,但它们通过创建对window.alert的新引用来污染全局命名空间。所以我建议将其包装在IIFE中:

(function() {
  var nativeAlert = window.alert;
  window.alert = function(message) {
    if (message.includes("test")) {
      nativeAlert(message);
    }
  };
}());

alert("Hello"); // Doesn't show up.
alert("Hello test"); // Works.

nativeAlert("test"); // Throws an error.

您可以更进一步创建一个使用谓词创建警报对象的警报函数生成器:

function alertGenerator(predicate) {
  if (typeof predicate === "function") {
    return function(message) {
      if (predicate(message) === true) {
        window.alert(message);
      }
    }    
  } else {
    return undefined;
  }
}

// Create an alert generator that requires the word "test" in it:
var testAlert = alertGenerator(t => t.includes("test"));
testAlert("Hello"); // Doesn't show up.
testAlert("Hello test"); // Works.

// Create an alert generator that requires the word "Hello" in it:
var helloAlert = alertGenerator(t => t.includes("Hello"));
helloAlert("Hello"); // Works.
helloAlert("Hello test"); // Works.
helloAlert("Test"); // Doesn't work.

答案 2 :(得分:2)

您可以将旧版本存储在变量

var ar = alert;
window.alert = function(text) {
    console.log(text);
    if (!text.includes("rambo"))
        ar("rambo");
    return true;
};

alert('dfs');

答案 3 :(得分:1)

如果您不想污染全局名称空间或使用 IIFE ,为什么不简单地包装{{ 1}},例如:

window.alert