出于多种原因,包括学习,我正在制作一个小型 JavaScript 框架。
因此,我想实现“文档就绪”功能,因此我去检查 jQuery 如何在 IE < 9 上伪造 DOMContentLoaded
。
问题是,它似乎没有按应有的方式工作。检查this fiddle在 IE8 和一个好的浏览器中。
逻辑是:应用 css 使 div 开始为红色,然后在“就绪”时使其变为蓝色,在加载时使其变为绿色。此外,还有三个带有假 URL 的 img 标签,因此就绪和加载之间存在合成延迟。
应该发生什么:
如果有的话,div 显示红色的时间不应超过一瞬间。理想情况下,首先看到的应该是蓝色。然后,当浏览器在无效图像上超时时,呈绿色。
IE8 上会发生什么:
div 保持红色,直到所有图像“加载”(在此合成示例中,超时),然后变为绿色。
再说一次,我并不是在要求修复,我是在问框架在 IE8 上的行为是否正确(我不再关心 IE 6-7),或者如果发生这种情况是由于我以某种方式滥用 jQuery。
P.S.:我知道如何手动绑定(bind)事件,我更多地询问这是否是预期的/可接受的/错误/我的错误。
最佳答案
我将按照预期进行工作。
对于不支持 DOMContentLoaded
的浏览器,jQuery 使用 document.readyState
。 document.readyState
仅在页面资源加载完成后才等于 complete
。
https://developer.mozilla.org/en-US/docs/DOM/document.readyState
他们不以“互动”方式进行这可能是有充分理由的,但我对此并不乐观。
编辑:这是您更新的关于 document.readyState == Interactive 事件的 fiddle
它适用于 IE7 和 IE8
编辑
jQuery 不使用“交互式”的原因是因为它在 IE9 中触发得太早。
http://bugs.jquery.com/ticket/12282#comment:25
我认为可能有一种更好的处理方法,可以使 IE7 和 8 正确就绪,同时在 IE9 中仍能正常工作
关于javascript - "document ready"在 IE 上应该这样工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12715136/