为什么此setInterval / document.write代码在Chrome上有效,但在Firefox上无效?

BA

这是一个简单的程序,可在浏览器窗口上打印数字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.writeChrome和Firefox之间的工作方式有所不同?

TJ人群

这是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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么此命令在我的终端上有效,但在我的代码中无效?

为什么此flex表在chrome上有效,但在IE 11上却不可用?

为什么反应本机边界半径在iOS上有效但在Android Image上无效

为什么sudo在Linux上有效但在Android上无效

为什么我的备用图标在iPhone上有效,但在iPad上无效?

为什么此代码在控制台中有效,但在页面加载时无效?

为什么此 JavaScript css 过滤器代码在 Firefox 中有效,而在 Chrome 中无效?

伪元素在 Firefox 中有效,但在 Chrome 中无效,为什么?

为什么此创建表SQL在MSSQL Server中有效但在MySQL上无效?

为什么我的API调用在chrome中有效,但在我的代码中无效?

在 React 中,我的 POST fetch 请求在桌面上有效,但在 Chrome 上的 iPad 上无效,有什么问题?

为什么此代码有效,而那个无效?

图形在Chrome上有效,但在Firefox上无效

Linux。为什么我的 Linux 命令在终端上有效,但在脚本中无效

为什么此代码在bash v4.4中有效但在bash v3.2中无效?

尽管代码相同,切换菜单按钮在索引页上有效,但在其他页面上无效-为什么?

document.write("</br>") 是否生成有效的 html,如果是,为什么?

代码在使用window.onload而不是document.ready时有效吗?为什么?

为什么此日期在iOS和Safari上无效,但在Chrome和Firefox中无效?

为什么CLASSPATH在Python上失败但在RazorSQL上有效?

在13:30:00和13:32:00之间设置数据子集在Mac上有效,但在Windows上无效,为什么?

为什么控制台应用程序循环在.NET Core 2.2.6上有效,但在.NET Framework 4.7.2上无效?

为什么此脚本在Ubuntu上而不在Debian上有效?

为什么`.forEach`在密集数组上有效而在稀疏数组上无效?

以下 c++ 代码在 leetcode 中有效,但在我的 vscode 中无效,为什么?

此查询在 mysql 上有效,但在 PHP 上返回 0(倒序虽然有效)

为什么此Spark代码在本地模式下有效,而在集群模式下无效?

将输入限制为仅某些字符在Chrome上有效,但在Firefox上无效

水平滚动在IE11上有效,但在Chrome和Firefox上无效