Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Safari中未按顺序执行JavaScript命令_Javascript_Macos_Safari - Fatal编程技术网

在Safari中未按顺序执行JavaScript命令

在Safari中未按顺序执行JavaScript命令,javascript,macos,safari,Javascript,Macos,Safari,我在处理另一个问题时发现了这个bug。列出的JavaScript命令的顺序与Safari中的执行顺序不同: 例如: alert('here'); document.write('This is the hidden message.'); alert('You should be seeing the hidden message by now.'); 在我的浏览器中,在document.write()语句之前执行警报。我在使用Safari版本5.17、6.0和6.0.2的两个不同MacOSX

我在处理另一个问题时发现了这个bug。列出的JavaScript命令的顺序与Safari中的执行顺序不同:

例如:

alert('here');
document.write('This is the hidden message.');
alert('You should be seeing the hidden message by now.');
在我的浏览器中,在
document.write()
语句之前执行
警报。我在使用Safari版本5.17、6.0和6.0.2的两个不同MacOSX上看到过这个bug,但我还没有确认是否有其他人看到过

这是小提琴:


有人能确认他们看到了这一点吗?如果是,请告诉我为什么会发生这种情况?

严格来说,我不认为这是一个bug。只是它是同步的,在第二次警报之前没有重新绘制。重新绘制通常不会发生在浏览器事件循环的同一个“勾号”内(尽管
document.write
似乎会在其他浏览器(例如Chrome)中强制重新绘制)

这个(丑陋的)解决方法应该可以解决它:

alert('here');
document.write('This is the hidden message.');
setTimeout(function() {
    alert('You should be seeing the hidden message by now.');
}, 0);

如果您有jQuery,请尝试以下操作:


根据我的评论,我的猜测是您在
文档中添加的文本。write
只是还没有呈现(但它仍然存在)。

我的猜测是document.write返回后但呈现文本之前触发的第二个警报。第二个警报会冻结浏览器的执行,因此在您解除第二个警报之前渲染不会完成。请尝试替换
文档。使用
控制台写入
。记录
,然后查看是否看到相同的内容。呃..如果Safari有一个可用的控制台的话。我实际上使用document.write来创建一个没有jQuery的示例,但可能同样的原理也适用。这里有一个jQuery的例子:是的,这就是我在回答时想要说的。它就在那里,只是还没有被渲染。@bfvaretto好吧,我的评论胜过了你的答案,而你的答案反过来又胜过了我的答案。:)但我觉得我贴的小提琴有点有趣,是的。别误会,我不是在这里比赛。事实上,我对你的答案投了赞成票!:)他们都是很好的答案,我选择了这个,因为这就是我最终的选择。我的实际用例根本没有任何警报。。。这只是表单提交处理程序中的一个$.show()调用。像冠军一样工作。谢谢