javascript - 在页面 DOM 加载时收到通知(但在 window.onload 之前)

标签 javascript dom

我知道有一些方法可以在页面主体加载时获得通知(在加载所有图像和第 3 方资源之前触发 window.onload 事件),但每个浏览器都不同.

是否有在所有浏览器上执行此操作的明确方法?

据我所知:

  • DOMContentLoaded:在 Mozilla、Opera 9 和最新的 WebKit 上。这涉及向事件添加监听器:

    document.addEventListener( "DOMContentLoaded", [初始化函数], false );

  • 延迟脚本:在 IE 上,您可以发出带有 @defer 属性的 SCRIPT 标签,它只会在 BODY 标签结束后可靠地加载。

    <
  • 轮询:在其他浏览器上,您可以继续轮询,但是否有标准的轮询对象,或者您是否需要在每个浏览器上做不同的事情?

我希望能够不使用 document.write 或外部文件。

这可以简单地通过 jQuery 完成:

$(document).ready(function() { ... })

但是,我正在编写一个 JS 库,不能指望 jQuery 总是在那里。

最佳答案

没有跨浏览器的方法来检查 DOM 何时准备就绪——这就是为什么像 jQuery 这样的库存在的原因,以抽象出令人讨厌的一点点不兼容性。

Mozilla、Opera 和现代 WebKit 支持 DOMContentLoaded 事件。 IE 和 Safari 需要奇怪的技巧,比如滚动窗口或检查样式表。血淋淋的细节包含在 jQuery 的 bindReady() 函数中。

关于javascript - 在页面 DOM 加载时收到通知(但在 window.onload 之前),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65434/

相关文章:

javascript - 使用 JavaScript 在网页之间传输数据

javascript - 在指令中调用 $compile($element)($scope) 的目的是什么

javascript - Angularjs Element 在一次调用中同时查找选择和输入 - 是否限制单个标签查找?

在括号中调用构造函数时未定义 Javascript 原型(prototype)函数

javascript - 为什么我的函数无法访问 Nodejs 中的全局对象

javascript - 从第二个下拉列表中隐藏第一个下拉列表选定的文本

jquery - 如何更改选定元素的多个实例的位置

javascript - 用于显示有向无环图 (DAG) 的 JS 库

javascript - 如何在 Gulp 中将文件和管道包装到同一目录中的新文件

javascript - 将 Shadow DOM 与 polyfill、platform.js 和 webcomponents.js 结合使用