使用load事件的话我理解的是因为js如果要操作dom元素的话要在dom树构建完成之后才可以操作。所以通常在js代码开头加window.onload或者jQuery的$(document).ready()。问下这个事件的缺点是什么?还有这个事件的替代事件有什么?除了DOMContentLoaded。
闭关修行中......
document.readyState可以用来模拟类似情况,不过没什么必要吧,window.onload很常规的用法,好像还没听说会出什么问题。
window.onload
window.onload=fun
其实这里这个是没问题的,但是假如有你有个插件也这样写,你也这样写:
//你的代码 window.onload=fun1 //插件代码 window.onload=fun2
这里会出现什么问题呢?很明显,fun1被替换成fun2;所以就会出现,你的代码失效了!现在很多插件都是要等到文档加载完才执行的,所以很多插件自己内部都会这有类似window.onload的注册方法,那么大家都用window.onload来注册函数那么就会出现部分代码失效问题!
而jquery的ready方法不会出现这个问题,因为它是个函数,函数有个参数是回调函数,每执行一次就会注册一个回调,你的代码写在回调里,这样就不会出现代码失效了,即使大家都用ready这个方法。
需要一个原理的可以研究下jquery的ready函数源码
楼上有说到 window.onload 互相覆盖的问题,addEventListener 即可。这个事件本身没什么问题,应用场景的话我主要是做一些数据的加载和空闲时间资源的请求,例如从 localstorage 里加载一些东西。(不过细节时间点的控制,由于我做的是 SPA,所以是在内部页面生命周期里控制的)于此对应的可能还会用到一些事件,如 unload 或 pagehide 之类的。
addEventListener
localstorage
unload
pagehide
document.readyState可以用来模拟类似情况,不过没什么必要吧,
window.onload
很常规的用法,好像还没听说会出什么问题。其实这里这个是没问题的,但是假如有你有个插件也这样写,你也这样写:
这里会出现什么问题呢?
很明显,fun1被替换成fun2;所以就会出现,你的代码失效了!
现在很多插件都是要等到文档加载完才执行的,所以很多插件自己内部都会这有类似window.onload的注册方法,那么大家都用window.onload来注册函数那么就会出现部分代码失效问题!
而jquery的ready方法不会出现这个问题,因为它是个函数,函数有个参数是回调函数,每执行一次就会注册一个回调,你的代码写在回调里,这样就不会出现代码失效了,即使大家都用ready这个方法。
楼上有说到
window.onload
互相覆盖的问题,addEventListener
即可。这个事件本身没什么问题,应用场景的话我主要是做一些数据的加载和空闲时间资源的请求,例如从
localstorage
里加载一些东西。(不过细节时间点的控制,由于我做的是 SPA,所以是在内部页面生命周期里控制的)于此对应的可能还会用到一些事件,如
unload
或pagehide
之类的。