这个问题就像在这里和网络上的其他人一样 - 如何检查DOM是否已加载Javascript?但这里有一个问题:
-
不使用像jQuery等框架;
-
不知道你的脚本是否已经通过静态放置的
<script>
标签加载,或者在DOM加载后很久以后通过其他一些Javascript加载 .
这可以或多或少可靠地完成并且具有跨浏览器兼容性吗?
Added: 让我澄清一下:我正在写一个独立的.JS文件,它可以包含在任意网页中 . 我想执行已加载DOM的代码 AFTER . 但我不知道 HOW 我的剧本将被包括在内 . 可以通过放置一个 <script>
标签(在这种情况下,传统的 onload
或DOM-readyiness解决方案将起作用);或者它可以通过AJAX或其他方式加载,在DOM已经加载之后很久(因此前面提到的解决方案永远不会触发) .
6 回答
document.readyState属性可用于检查文档是否已准备好:
Firefox,Opera和基于Webkit的浏览器都有一个文档级事件
DOMContentLoaded
,您可以使用document.addEventListener("DOMContentLoaded", fn, false)
进行监听 .它在IE中更复杂 . jQuery在IE中做的是在特定的readystate的document对象上查看
onreadystatechange
,并备份document.onload事件 . document.onload会在DOM准备就绪之后触发(仅当所有图像都已完成加载时)才会因某种原因而起作用 .如果你花一些时间谷歌搜索,你会找到代码来做到这一点 . 我认为执行此操作最多的代码是在jQuery和YUI等大型框架中,因此,即使我不使用该框架,我也会查看其源代码中的技术 .
这是
document.ready()
的jQuery 1.6.2源代码的主要部分:这适用于所有浏览器,简洁明了:
如果依赖
document.readyState
是好的,快速而肮脏的解决方案与轮询:当初始HTML文档被完全加载和解析时,
DOMContentLoaded
事件被触发,而不需要等待样式表,图像和子帧完成加载 . 好的东西是chrome,firefox,IE9,opera和safari同样支持它这是通过在页面底部运行脚本的一种方法 . 此外,通过使用window.onload,您可以等待加载所有图像/脚本 . 或者你可以简单地将代码放在底部,而不是等待加载图像 .
Edited: for Vilx's Comment
这里的许多onload绑定都是一个例子http://jsfiddle.net/uTF2N/3/