通过JavaScript捕获和更改默认警报()行为

通过JavaScript捕获和更改默认警报()行为,javascript,jquery,html,alert,appmobi,Javascript,Jquery,Html,Alert,Appmobi,我很久以前就做过类似的事情,我捕获了警报,并阻止默认的基于浏览器的警报框弹出,并用一种或另一种模式替换它。然而,我已经很久没有这么做了,我无法从我的旧代码中找到任何关于我是如何做到这一点的参考资料,目前也无法通过谷歌找到任何相关信息。所以我希望这里有人能在这方面帮助我,帮助我走出困境。我还没有尝试过任何东西,所以不要问我尝试了什么。除了花上一个小时左右的时间在谷歌上搜索不同的短语,寻找类似于我模糊记忆中的代码片段,我空手而归。我知道,这是一个质量很差的问题,但同时我相信其他人也希望知道答案 在本

我很久以前就做过类似的事情,我捕获了警报,并阻止默认的基于浏览器的警报框弹出,并用一种或另一种模式替换它。然而,我已经很久没有这么做了,我无法从我的旧代码中找到任何关于我是如何做到这一点的参考资料,目前也无法通过谷歌找到任何相关信息。所以我希望这里有人能在这方面帮助我,帮助我走出困境。我还没有尝试过任何东西,所以不要问我尝试了什么。除了花上一个小时左右的时间在谷歌上搜索不同的短语,寻找类似于我模糊记忆中的代码片段,我空手而归。我知道,这是一个质量很差的问题,但同时我相信其他人也希望知道答案

在本例中,我只想捕获触发
alert()
框的事件,并将其中的消息传递给另一种通知变体。目前,我正在与其他几位同事在appmobi中进行一些工作,我想获取
alert()
捕获它,然后使用它


AppMobi.notification.alert(消息、标题、按钮文本)
作为
警报()
的默认操作,您只需覆盖警报方法:

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

请注意,这不会像常规的
警报那样具有阻塞行为,正如其他人所指出的,它可以被覆盖-请记住
AppMobi.notification.alert
需要三个参数。如果它有备用默认值,我不会感到惊讶,但安全总比抱歉好:

window.alert = function(message,title,buttontext) {
   AppMobi.notification.alert(message,title,buttontext); 
};
//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');

window
就是这样。。我知道这是一种效果该死的,说的是往错误的方向想。非常好,谢谢。@chris:好吧,你可以在你想要的任何范围内将自己的值设置为
alert
<代码>窗口
表示全局范围。您可以在闭包中设置它,以仅覆盖该闭包中警报的含义。+1用于提及标准
警报()的阻塞/同步行为。
的可能重复