【问题标题】:Is "document ready" supposed to work like this on IE?“文档准备就绪”应该在 IE 上像这样工作吗?
【发布时间】:2012-10-03 19:05:55
【问题描述】:

出于各种原因,包括学习,我正在制作一个小型 javascript 框架。

因此,我想实现“文档就绪”功能,所以我去检查 jQuery 如何在 IE DOMContentLoaded。

问题是,它似乎没有按应有的方式工作。在 IE8 和良好的浏览器中检查 this fiddle。

逻辑是:应用 css 使 div 开始为红色,然后在“准备好”时将其变为蓝色,在加载时将其变为绿色。此外,还有三个带有虚假 URL 的 img 标签,因此在准备和加载之间存在综合延迟。

会发生什么:
如果有的话,div 不应显示为红色超过一瞬间。理想情况下,首先看到的应该是蓝色。然后,当浏览器在无效图像上超时时,绿色。

在 IE8 上会发生什么:
div 保持红色,直到所有图像“加载”(在此合成示例中为超时),然后变为绿色。

再一次,我并不是在要求修复,我是在问一个框架在 IE8 上的行为是否正确(我不再关心 IE 6-7),或者如果这是因为我以某种方式滥用 jQuery。

P.S.:我知道如何手动绑定事件,我想进一步了解这是否是预期/可接受/错误/我的错误。

【问题讨论】:

  • @canon 我知道...这就是问题的重点。
  • @canon 这就是 OP 提供加载和就绪功能的原因。

标签: javascript jquery onload document-ready domcontentloaded


【解决方案1】:

我会按预期工作。

jQuery 为不支持DOMContentLoaded 的浏览器使用document.readyState。 document.readyState 仅在页面资源加载完成时等于 complete。

https://developer.mozilla.org/en-US/docs/DOM/document.readyState

他们没有在“交互式”上这样做可能是有充分理由的,但我对此并不积极。

编辑:这是您在 document.readyState == interactive 上更新的小提琴

http://jsfiddle.net/PFWmS/7/

IE7 和 IE8 都可以使用

编辑

jQuery 不使用“交互式”的原因是因为它在 IE9 中触发得太早了。

http://bugs.jquery.com/ticket/12282#comment:25

我认为可能有更好的方法来处理导致 IE7 和 8 正确的准备时间,同时在 IE9 中仍能正常工作

【讨论】:

  • 致敬,伙计!所以它应该检查interactive。现在,我不知道该怎么做,他们只是“放弃了对 IE8 的支持”?
  • 我接受答案(和 +1),因为您发现的内容可以让我开始,但我仍然对 jQuery 的这种内置行为感到好奇。
  • 由于计划中的 1.9oldIE 与 2.0modern 拆分,我希望下一版本的 jQuery 不会出现问题。
  • 哇,所以他们会拆分源?这对我来说是个新闻!现在是时候了,我相信如果 jQuery 只依赖于 ES5 等的现代特性,它会快得多。有点像Zepto。
  • 有趣...它似乎总是以这种方式工作,即使在 jQuery 1.6.4 中,IE7 和 8 在图像加载失败之前不会触发 ready 事件。
猜你喜欢
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
相关资源
最近更新 更多