以下是更新内容
我认为我在Safari 5.1(Mac OS X Lion系统下)中发现了一个非常奇怪的bug。我无法确定这个bug是否存在于早期版本的Safari中,但我有点怀疑不会(因为我的网站与此问题相关的部分在Lion之前的Safari中仍能正常工作)。在Chrome、Firefox 6、IE7和IE9中,我没有看到这个bug。我还确认了在Windows 7上的Safari 5.0.2中没有出现这个bug,这可能意味着这是Safari 5.1的新bug。
所以,这就是这个bug:如果javascript confirm()函数位于另一个函数内部,则在单击“OK”或“Cancel”按钮之前调用confirm()函数之前的所有内容都不会被执行。这对我来说似乎是一个巨大而又非常奇怪的bug。以下是我的示例代码:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function myexit () {
console.log(0);
if ( confirm('Are you sure?') ) {
window.close();
}
}
</script>
</head>
<body>
<a href="#" onclick="myexit();">close window</a>
</body>
</html>
在我提到的其他浏览器中,模态确认框出现时控制台中会同时出现数字0。但在Safari中,只有在点击“确认”或“取消”后才会出现数字0。
另外,如果将confirm()函数放在子函数中,像这样:
function confirmwrapper() {
if ( confirm('Are you sure?') ) {
console.log(1);
}
}
function myexit () {
console.log(0);
confirmwrapper();
}
...仍然会发生错误。
我是否忽略了一些基本的东西?尊重地说,像“只需使用JQuery/Mootools/其他一些很酷的JS库”这样的答案可能并没有帮助到我,因为这个代码是一个遗留系统的一部分,我现在不能完全拆开它,尽管我想这么做。
更新:我刚测试了一个简单的AJAX请求(对于那些正在跟踪的人来说,是Mootools Request()),并且我能够确认请求直到确认对话框关闭(无论是“确定”还是“取消”)之前不被执行。这肯定是一个bug。
提前感谢你的帮助。