CMUI / underscore.ext

[Deprecated] Please use `Gearbox` instead.
https://github.com/CMUI/gearbox
2 stars 3 forks source link

Improve the approach to get body element asap. #12

Closed zpbx closed 10 years ago

zpbx commented 10 years ago

dom.js 源码考虑到了当所有脚本放在 <head> 中加载的情况。此时 document.body 元素并不存在,因此需要尽快地(异步)获取此元素并保存至 _.dom.jBody 中,以确保应用层代码对这个变量的使用是可靠的。

原先以 $(fn) 的方式来实现异步获取 document.body 元素,但发现在 Firefox 下跑不通单元测试。原来在 Firefox 下,DOMContentLoaded 事件的触发时间较晚,并不像 Chrome 那样当 document.readyState 变为 interactive 时就立即触发。这样,在这个时间差内,如果存在以 $(fn) 方式运行的业务代码,则业务代码是取不到正确的 _.dom.jBody 变量的。

因此需要更早地获取 document.body 元素——监听 document.readyState 的变化,一旦发现其值变为 interactive 就立即去获取 document.body 元素。