在Safari中未按顺序执行JavaScript命令
我在处理另一个问题时发现了这个bug。列出的JavaScript命令的顺序与Safari中的执行顺序不同: 例如:在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
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()调用。像冠军一样工作。谢谢