WEB页面的生命周期,DOMContentLoaded,load,beforeunload,unload
by 毛三胖 on 2018年02月24日
阅:557赞:11

简言

理解WEB页面的生命周期,文档加载事件及顺序对WEB开发有十分的重要意义。如果不理解,在元素未加载就提前操作元素,则得不到想要的结果。而如果页面完全加载完成后,再进行操作,则又会影响用户体验。

一般来说,大多数的操作我们都应该放在DOMContentLoaded事件中执行。采用如下形式:

document.addEventListener('DOMContentLoaded', function () {
    alert("DOMContentLoaded");
});

当初始的 HTML 文档被完全加载和解析完成之后,DOMContentLoaded 事件被触发,而无需等待样式表、图像和子框架的完成加载。

演示程序

说明

理解WEB页面的生命周期,文档加载事件及顺序对WEB开发有十分的重要意义。用过JQuery都知道,我们大多将代码写在$(document).ready()中,当文档加载完成后,就会执行该函数。如果不这样做,在文档未加载完成之前操作DOM,就得不到想要的结果。

从演示程序可以看出一般浏览器的加载顺序如下:

  • script executed
  • readyState : interactive
  • DOMContentLoaded
  • image onload
  • iframe onload
  • readyState : complete
  • window onload

从以上可以看出同步的Script总是先于其它事件执行,而window.onload事件总是最后执行。而image onload和iframe onload的先后顺序并不确定。

结论

关于WEB页面的生命周期,一般你应该记住如下这些观点,一些观点从运行结果中也可以得出。

  • 同步的JavaScript脚本最先执行,它先于DOMContentLoaded事件执行。

  • 当DOM准备就绪时,DOMContentLoaded事件在document上触发。 我们可以在这个阶段利用JavaScript来操作DOM元素。

    • 所有脚本都执行完毕,除了那些外部使用异步(async)或延迟(defer)加载的脚本
    • 图片和其他资源可能仍在载入过程中。
  • window上的onload事件,在页面加载完所有资源后触发。 我们很少使用它,因为通常的操作不用等到最后才执行。

  • window上的beforeunload事件,该事件在用户准备离开页面,在unload事件之前触发。 如果beforeunload返回一个字符串,浏览器会给出 用户是否真的想离开的提示。

  • window上的unload事件,当用户最终离开时会触发该事件。在unload的事件处理程序中,我们只能做简单的事情,不涉及延迟或询问用户。 由于这个限制,它很少使用。

  • document.readyState表示文档的当前状态,可以在readystatechange事件中跟踪文档状态的变更。

    • loading – 文档正在载入。
    • interactive – document已经解析完毕时触发,几乎与DOMContentLoaded同时发生,但在DOMContentLoaded事件之前触发。
    • complete – 文档和资源加载完成时触发,几乎与window.onload同时发生,但在onload事件之前触发。

一般来说,大多数的操作我们都应该放在DOMContentLoaded事件中执行,而不要放在window.onload中执行。

$ 热门标签
$ 贴士
简单是稳定的前提。 -Edsger Dijkstra
$ 声明
本站所有代码及文字都是作者精心汇编整理而成,转载代码及文字请明确注明出处和作者名称。