Closed zpbx closed 10 years ago
dom.js 源码考虑到了当所有脚本放在 <head> 中加载的情况。此时 document.body 元素并不存在,因此需要尽快地(异步)获取此元素并保存至 _.dom.jBody 中,以确保应用层代码对这个变量的使用是可靠的。
dom.js
<head>
document.body
_.dom.jBody
原先以 $(fn) 的方式来实现异步获取 document.body 元素,但发现在 Firefox 下跑不通单元测试。原来在 Firefox 下,DOMContentLoaded 事件的触发时间较晚,并不像 Chrome 那样当 document.readyState 变为 interactive 时就立即触发。这样,在这个时间差内,如果存在以 $(fn) 方式运行的业务代码,则业务代码是取不到正确的 _.dom.jBody 变量的。
$(fn)
DOMContentLoaded
document.readyState
interactive
因此需要更早地获取 document.body 元素——监听 document.readyState 的变化,一旦发现其值变为 interactive 就立即去获取 document.body 元素。
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
元素。