如何在页面上禁用某些警报并允许其他人?
我尝试使用此代码:
window.alert = function ( text ) {
console.log(text);
if(!text.includes("rambo"))
alert("rambo");
};
这不起作用,因为它再次调用警报而不是警报。
我需要使用javascript警报(不是任何其他库)
答案 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