这是一个简单的程序,可在浏览器窗口上打印数字1到10。
var t = 1;
var a = function timer() {
if (t < 11) {
document.write(t + "<br/>");
t = t + 1;
} else {
clearInterval(handle);
}
}
var handle = setInterval(a, 100);
该功能在Chrome上有效(数字1到10之间出现短暂的延迟),但在Firefox上不起作用(仅显示1,没有错误)。为什么?
我知道我可以使用console.log
,但这不是重点。为什么document.write
Chrome和Firefox之间的工作方式有所不同?
这是Chrome WebKit中的错误;根据Kaiido的说法,它也发生在Safari上。
document.write
页面主解析完成后的调用涉及对的隐式调用document.open
。根据规范,调用document.open
应销毁文档,删除所有事件处理程序,并丢弃所有任务。这意味着Firefox正在执行的操作是正确的,因为它在空白文档中显示1。它不能继续进行,因为由安排的任务setInterval
已被丢弃。
正如您已经指出的那样,有时Firefox微调器会继续运行,就像它期望发生其他事情一样。我喜欢亚当·科涅斯卡(Adam Konieska)关于这是为什么的理论:当我们执行时document.write(1)
,我们隐式地执行document.open
,并且正在等待document.close
。实际上,如果我们document.close
在您的代码中添加a进行测试,则微调器不会停留在周围:
var t = 1;
var a = function timer() {
if (t < 11) {
document.write(t + "<br/>");
t = t + 1;
document.close(); // Just to test Firefox's spinner
} else {
clearInterval(handle);
}
}
var handle = setInterval(a, 100);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句