3

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

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

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

4

3 回答 3

11

您可以简单地覆盖警报方法:

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

请注意,这不会有常规的阻塞行为alert

于 2012-09-11T06:39:20.470 回答
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');

摆弄

于 2012-09-11T08:43:33.133 回答
1
window.alert = function(message,title,buttontext) {
   AppMobi.notification.alert(message,title,buttontext); 
};
于 2012-09-11T06:41:18.843 回答