Answers:
当文档已经完全加载和解析时,将触发DOMContentLoaded事件,而无需等待样式表,图像和子帧完成加载(可以使用load事件来检测完全加载的页面)。
DOMContentLoaded
一旦完全构建了DOM层次结构,就会触发该load
事件,当所有图像和子帧均已加载完成时,该事件就会触发。
DOMContentLoaded
将可在大多数现代浏览器上使用,但不适用于包括IE9及更高版本的IE。有一些替代方法可以在IE的较早版本上模拟此事件,例如jQuery库中使用的替代方法,它们会附加IE特定的 onreadystatechange
事件。
自己看看区别:
当前页面的解析完成时,将触发DOMContentLoaded事件。当所有文件从所有资源(包括广告和图片)加载完成后,就会触发load事件。DOMContentLoaded是一个很棒的事件,可用于将UI功能连接到复杂的网页。
当文档已经完全加载和解析时,将触发DOMContentLoaded事件,而无需等待样式表,图像和子帧完成加载(可以使用load事件来检测完全加载的页面)。
DOMContentLoaded
保证已加载所有脚本(包括延迟/异步)?关于脚本,这里什么也
DOMContentLoaded
==window.onDomReady()
Load
==window.onLoad()
在文档“就绪”之前,无法安全地操纵页面。jQuery为您检测到这种就绪状态。$(document).ready()内包含的代码仅在页面Document Object Model(DOM)准备好执行JavaScript代码后才能运行。一旦整个页面(图像或iframe)(不仅是DOM)准备就绪,$(window).load(function(){...})中包含的代码将运行。
请参阅:http : //learn.jquery.com/using-jquery-core/document-ready/
这是一些对我们有用的代码。我们发现MSIE容易受到影响,DomContentLoaded
当没有其他资源被缓存时(根据我们的控制台日志记录最长为300ms),似乎会有一些延迟,并且在缓存它们时会触发得太快。因此,我们对MISE求助。您还想触发doStuff()
函数,无论是DomContentLoaded
在外部JS文件之前还是之后触发。
// detect MSIE 9,10,11, but not Edge
ua=navigator.userAgent.toLowerCase();isIE=/msie/.test(ua);
function doStuff(){
//
}
if(isIE){
// play it safe, very few users, exec ur JS when all resources are loaded
window.onload=function(){doStuff();}
} else {
// add event listener to trigger your function when DOMContentLoaded
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded',doStuff);
} else {
// DOMContentLoaded already loaded, so better trigger your function
doStuff();
}
}