如果我有类似
的话alert = 0;
在另一个剧本中。
这是另一个脚本,我的代码无法在该脚本之前加载。
如何在脚本中调用原始alert
方法?
答案 0 :(得分:15)
在覆盖原始alert
之前,请将其保存。
var origAlert = alert;
alert = 0;
origAlert("foo");
演示:http://jsfiddle.net/jfriend00/tnNE7/
如果您无法保存原始值,我知道的另一种方法是访问iframe。这是一个例子:
alert = 0;
var iframe = document.createElement("iframe");
iframe.height = 0;
iframe.width = 0;
document.body.appendChild(iframe);
iframe.contentWindow.alert.call(window, "foo");
工作示例:http://jsfiddle.net/jfriend00/waMEV/
我没有在所有浏览器中尝试过此功能,但它适用于Chrome,IE和Firefox,我认为它应该适用于其他浏览器。
答案 1 :(得分:5)
好的,我是第一个承认这是一个丑陋的答案的人,但似乎有效:
alert = 0;
var win = window.open(),
method = win.alert;
win.close();
method.call(window, "my message");
Fiddle here.基本上,您创建一个新窗口实例并窃取其alert
方法。缺点是你实际上必须打开一个新的浏览器窗口,虽然是短暂的。我怀疑这实际上是解决您问题的实际方法 - 取决于您尝试使用的其他网站,以及您关心解决方案对最终用户的看法。
编辑:这是上述答案和jfriend00的答案的组合,它解决了“打开新窗口”的问题。我认为这是一个更好的选择,因为a)当你需要调用方法时它不依赖于iframe仍然在DOM中,并且b)它应该可以推广到任何window
方法, jfriend00的答案可能不是。
alert = 0;
// make a new window instance in an iframe
var iframe = document.createElement("iframe");
iframe.height = iframe.width = 0;
document.body.appendChild(iframe);
// steal the method
var method = iframe.contentWindow.alert;
// remove the evidence
document.body.removeChild(iframe);
// now use the method for your own purposes
function myAlert(message) {
method.call(window, message);
}
myAlert("foo");