【问题标题】:What does ‘readystatechange’ event for ‘window’ mean?“window”的“readystatechange”事件是什么意思?
【发布时间】:2016-12-13 01:04:48
【问题描述】:

尝试处理window.onreadystatechange,我注意到此事件在页面加载期间触发两次。但我无法弄清楚每次事件发生后究竟发生了什么变化。如果不是window,而是document,那么就有document.readyState 属性包含当前状态。但是在window 的情况下,没有任何“window.readyState” 或类似的属性。那么当windowreadystatechange 事件触发时,它的真正含义是什么?第一次和第二次触发的区别是什么?

这是我的代码,它提供了两个看似相同的控制台输出:

'use strict';

window.addEventListener('readystatechange', function(e) {
  console.log(window, e);
});

【问题讨论】:

  • "readyState" 确实是文档对象上的一个属性:developer.mozilla.org/en-US/docs/Web/API/Document/readyState
  • 我没有收到任何事件。你使用的是什么浏览器?该页面上还加载了哪些其他脚本?
  • @Bergi,我使用的是 MS Edge 38.14393.0.0,因为它是一个测试页面,所以没有其他脚本链接到该页面。
  • Edge 有没有可能让它冒泡到窗口?你能检查它是否对应于文档事件吗?
  • bubblestrue,这证实了@Kaiido 的理论。虽然是shouldn't。而且真的不是从documentwindow。对我来说似乎是一个错误。

标签: javascript window microsoft-edge readystate onreadystatechange


【解决方案1】:

window 仅在 IE 和 Edge 中触发 readystatechange 事件(在 IE 11 中测试)。 它不会在 Firefox 或 Chrome 中触发。

当它的readyState 更改为"interactive""complete"(冒泡)时,它实际上是由文档触发的。

因此,在 IE 中:

window.onreadystatechange == document.onreadystatechange

我不建议使用它,因为此事件不会在其他浏览器中触发。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 2019-02-15
  • 2016-10-12
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
相关资源
最近更新 更多