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

时间:2013-01-04 23:03:32

标签: javascript macos safari

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

示例:

alert('here');
document.write('This is the hidden message.');
alert('You should be seeing the hidden message by now.');

在我的浏览器中,alertsdocument.write()语句之前执行。我在使用Safari版本5.17,6.0和6.0.2的两个不同的Mac OS X上看到了这个错误,但我还没有确认其他人已经看过这个。

这是小提琴:

http://jsfiddle.net/akJD7/

任何人都可以确认他们看到了这个,如果有,请告诉我为什么会这样?

2 个答案:

答案 0 :(得分:3)

严格来说,我认为这不是一个错误。只是它是全部同步的,并且在第二次警报之前没有重新绘制。重绘通常不会发生在浏览器事件循环的同一“滴答”内(尽管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);

答案 1 :(得分:2)

试试这个,如果你有jQuery:http://jsfiddle.net/2Kcuz/

根据我的评论,我的猜测是您添加的文字document.write尚未呈现(但它仍然存在)。