努夫说。我完全不知道为什么使用alert()就行不通。它在Firefox中完美运行,但在Chrome中出现了这个错误。
答案 0 :(得分:17)
window.alert = null;
alert('test'); // fail
delete window.alert; // true
alert('test'); // win
window
是DOMWindow
的一个实例,通过将某些内容设置为window.alert
,正确的实现被“遮蔽”,即访问alert
时它首先要查看在window
对象上。通常没有找到它,然后它上升到原型链以找到本机实现。但是,当手动将alert
属性添加到window
时,它会立即找到它并且不需要上升原型链。使用delete window.alert
,您可以删除窗口自己的属性,并再次公开alert
的原型实现。这可能有助于解释:
window.hasOwnProperty('alert'); // false
window.alert = null;
window.hasOwnProperty('alert'); // true
delete window.alert;
window.hasOwnProperty('alert'); // false
答案 1 :(得分:14)
我最近在测试服务器上遇到了同样的问题。在寻找可能发生的原因并测试我在此处找到的解决方案之后,我回想起我已经点击了“停止此页面”创建弹出窗口"我正在处理的脚本几个小时之前的选项是疯狂弹出警报。
解决方案就像关闭标签并打开新标签一样简单!
答案 2 :(得分:1)
看一下这个主题:http://code.google.com/p/chromium/issues/detail?id=4158
问题是由javascript引起的 方法“window.open(URL,windowName [, windowFeatures])“。如果是第3个 参数windowFeatures已指定, 然后警报框不起作用 Chrome中的popup约束窗口, 这是一个简化的缩减:
http://go/reductions/4158/test-home-constrained.html
如果是第3个参数windowFeatures 忽略,然后警报框工作 Chrome中的弹出窗口(弹出窗口实际上是 作为Chrome中的新标签打开,就像 这样:
http://go/reductions/4158/test-home-newtab.html
它不会发生在IE7,Firefox3或 Safari3,这是一个特定于chrome的问题。
另请参阅附件以简化 减少
答案 3 :(得分:0)
这是一个不需要ajQuery的代码段,可以在禁用的iframe中启用警报(就像在codepen上一样)
for (var i = 0; i < document.getElementsByTagName('iframe').length; i++) {
document.getElementsByTagName('iframe')[i].setAttribute('sandbox','allow-modals');
}
以下是在此修复后使用alert()的codepen演示:http://codepen.io/nicholasabrams/pen/vNpoBr?editors=001
答案 4 :(得分:0)
把这条线放在身体的尽头。可能是DOM尚未就绪,此时此编译器已读取此行。
<script type="text/javascript" src="script.js"></script>"