通过JavaScript捕获和更改默认的alert()行为

时间:2012-09-11 06:36:36

标签: javascript jquery html alert appmobi

很久以前我做过这样的事情,我抓住了警报并阻止默认的基于浏览器的警报框弹出并用一种或另一种模式替换它。然而,自从我这么做了很长时间以来,我找不到我的旧代码的任何参考我是如何做到的,我也无法通过谷歌找到任何相关内容。所以..我希望有人能帮助我,帮助我。我还没有尝试过任何东西,所以请自己解决我尝试过的问题。除了花费最后一个小时左右的谷歌搜索不同的短语,任何类似于我模糊记忆中的代码的代码,我都空手而归。我知道,这是一个质量低劣的问题,但与此同时我相信其他人也会很高兴知道答案。

我想要做的就是捕获会触发alert()框并将其中的消息传递给另一个通知变体的事件。目前我正在appmobi与其他几个人一起做一些工作,我想alert()抓住它然后使用

AppMobi.notification.alert(message,title,buttontext);作为alert()

的默认操作

3 个答案:

答案 0 :(得分:11)

您只需覆盖警报方法:

window.alert = function(msg) {
   // whatever you want to do with 'msg' here
};

请注意,这不会有常规alert

的阻止行为

答案 1 :(得分:1)

window.alert = function(message,title,buttontext) {
   AppMobi.notification.alert(message,title,buttontext); 
};

答案 2 :(得分:1)

正如其他人所指出的,它可以被覆盖 - 只需记住AppMobi.notification.alert期望三个参数。如果它有后备默认值,我会不会感到惊讶,但比抱歉更安全:

//alert is a native code function that we may need elsewhere
window.legacyAlert = window.alert;
window.alert = function(_msg) {
  AppMobi.notification.alert(_msg, 'Alert', 'OK');//or whatever
};

这会全局覆盖该方法。或者,您可能需要使用闭包仅在代码的某些部分覆盖它:

alert('this is a vanilla js alert');
(function(alert) {
    alert('this alert has been overridden');
})(AppMobi.notification.alert);
alert('this is another vanilla js alert');

Fiddled