Javascript 阻止其他对话框时,window.alert后的代码不执行

Javascript 阻止其他对话框时,window.alert后的代码不执行,javascript,firefox,popup,Javascript,Firefox,Popup,在firefox 38中,我注意到如果我激活浏览器反弹出功能,它会停止在调用window.alert()或window.confirm()后的行上执行代码 例如,给定代码: var cb=document.querySelector(“输入”); cb.onclick=函数(){ 控制台日志(“警报前”); 窗口警报(“foo”); 控制台日志(“警报后”); }; 没有发现任何关于这种奇怪警报行为的提及。HTML5规范只说明了一般性: 。。。用户代理可能会向用户提供忽略所有警报的选项 我建议

在firefox 38中,我注意到如果我激活浏览器反弹出功能,它会停止在调用
window.alert()
window.confirm()后的行上执行代码

例如,给定代码:

var cb=document.querySelector(“输入”);
cb.onclick=函数(){
控制台日志(“警报前”);
窗口警报(“foo”);
控制台日志(“警报后”);
};

没有发现任何关于这种奇怪警报行为的提及。HTML5规范只说明了一般性:

。。。用户代理可能会向用户提供忽略所有警报的选项

我建议将警报包装到try/catch块中,使其行为“标准”:

功能myAlert(消息){
试一试{
窗口。警报(消息);
}捕获(e){
日志(“警报错误!”);
}
}
var cb=document.querySelector(“输入”);
cb.onclick=函数(){
控制台日志(“警报前”);
myAlert(“foo”);
控制台日志(“警报后”);

};我已经在Firefox和Google chrome上试过了

那里没有这样的功能

即使确认也不行(此处给出了示例)-

函数myFunction(){
var-txt;
控制台日志(“警报前”);
var r=确认(“按下按钮!”);
如果(r==true){
txt=“您按下了OK!”;
}否则{
txt=“您按了取消!”;
}
控制台日志(“警报后”);
document.getElementById(“demo”).innerHTML=txt;
}
单击按钮以显示确认框并检查控制台日志

试试看

我的Firefox是44,并且在选中警报弹出窗口中的“防止警报”复选框后,我会正常获取两个控制台日志,请尝试将您的Firefox更新为最新版本one@Armen你说得对,v44表现正常。我认为v38、40和42的表现也很奇怪。如果它显示了一些重要的警报/确认消息,您可以使用一些现成的弹出窗口来代替默认消息:或者选择其中一个,等等。。并实现
ok
cancel
按钮,其中包含
callbacks
,因此它在不同浏览器下的行为方式相同。谢谢,在较新的firefox版本中,它们更改了行为。这在某些版本中有效。有时firefox会在警报被抑制时抛出异常,但在其他版本中,它会无声地失败。