3

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

例子:

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

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

这是小提琴:

http://jsfiddle.net/akJD7/

谁能确认他们看到了这一点,如果是,请告诉我为什么会这样?

4

2 回答 2

3

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

​</p>

于 2013-01-04T23:09:01.250 回答
2

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

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

于 2013-01-04T23:11:56.010 回答