当前位置:  开发笔记 > 编程语言 > 正文

window.onload vs document.onload

如何解决《window.onloadvsdocument.onload》经验,为你挑选了7个好方法。

哪个得到更广泛的支持:window.onloaddocument.onload



1> Josh Mein..:

在window.onload

他们什么时候开火?

在window.onload

默认情况下,在整个页面加载时会触发它,包括其内容(图像,CSS,脚本等)

在某些浏览器中,它现在接管了document.onload的角色,并在DOM准备好时触发.

document.onload

当DOM准备就绪时调用它,它可以在图像之前加载其他外部内容.

它们的支持程度如何?

window.onload似乎是最广泛支持的.实际上,一些最现代的浏览器在某种意义上用window.onload替换了document.onload.浏览器支持问题很可能是许多人开始使用诸如jQuery之类的库来处理文档准备就绪的原因,如下所示:

$(document).ready(function() { /* code here */ });
$(function() { /* code here */ });

出于历史的目的:

window.onload vs body.onload

作为一个注释,一段时间以来关于使用window.onloadover的问题在编码论坛上提出了类似的问题document.onload.结果似乎是你应该使用window.onload,因为将结构与动作分开是很好的.


实际上,这个陈述似乎是针对`window.onload`和``之间的选择,这完全不同(在这种情况下,"与动作分离的结构"更有意义).不是答案是错的,但它的基础是.
那句话在语法上太可怕了......不应该有一些(标记的)编辑帮助吗?

2> Lorenz Lo Sa..:

一般的想法是window.onload在文档的窗口准备好进行演示触发,而document.onloadDOM树(从文档中的标记代码构建)完成触发.

理想情况下,订阅DOM树事件,允许通过Javascript进行屏幕外操作,几乎不会产生CPU负载.相反,当尚未请求,解析和加载多个外部资源时,window.onload可能需要一段时间才能触发.

►测试场景:

要观察差异以及选择的浏览器如何实现上述事件处理程序,只需在文档的- 标记中插入以下代码即可.


►Result:

以下是Chrome v20(可能是大多数当前浏览器)可观察到的结果行为.

没有document.onload事件.

onload在内部声明时触发两次,一次在内部声明时(事件发生的地方document.onload).

计数和行动取决于计数器的状态允许模拟两种事件行为.

或者window.onload在HTML 元素的范围内声明事件处理程序.

►示例项目:

上面的代码取自该项目的代码库(index.htmlkeyboarder.js).


有关窗口对象的事件处理程序列表,请参阅MDN文档.



3> Akash..:

添加事件监听器



Update March 2017

1香草JavaScript

window.addEventListener('load', function() {
    console.log('All assets are loaded')
})


2 jQuery

$(window).on('load', function() {
    console.log('All assets are loaded')
})


祝好运.


"在完全加载和解析初始HTML文档时,会触发DOMContentLoaded事件,而无需等待样式表,图像和子帧完成加载." - https://developer.mozilla.org/en/docs/Web/Events/DOMContentLoaded因此,您在此活动中加载的所有内容似乎都不正确.
我喜欢这个答案的是它提供了一个简单的javascript解决方案.您认为大多数人认为jQuery是内置于所有浏览器中的,因为它是唯一的答案.
@ProfK,感谢您的反馈.你能试试`window.addEventListener('load',function(){...})`.我也更新了我的答案.

4> Oriol..:

根据解析HTML文档 - 结束,

    浏览器解析HTML源并运行延迟脚本.

    DOMContentLoadeddocument解析并运行所有HTML时调度A. 事件起泡到了window.

    浏览器加载延迟加载事件的资源(如图像).

    一个load事件发送到window.

因此,执行顺序将是

    DOMContentLoadedwindow捕获阶段的事件侦听器

    DOMContentLoaded 事件听众 document

    DOMContentLoadedwindow泡沫阶段的事件监听器

    load事件监听器(包括onload事件处理程序)window

永远不应该调用bubble load事件侦听器(包括onload事件处理程序)document.load可能只调用捕获侦听器,但由于加载了样式表之类的子资源,而不是由于文档本身的负载.

window.addEventListener('DOMContentLoaded', function() {
  console.log('window - DOMContentLoaded - capture'); // 1st
}, true);
document.addEventListener('DOMContentLoaded', function() {
  console.log('document - DOMContentLoaded - capture'); // 2nd
}, true);
document.addEventListener('DOMContentLoaded', function() {
  console.log('document - DOMContentLoaded - bubble'); // 2nd
});
window.addEventListener('DOMContentLoaded', function() {
  console.log('window - DOMContentLoaded - bubble'); // 3rd
});

window.addEventListener('load', function() {
  console.log('window - load - capture'); // 4th
}, true);
document.addEventListener('load', function(e) {
  /* Filter out load events not related to the document */
  if(['style','script'].indexOf(e.target.tagName.toLowerCase()) < 0)
    console.log('document - load - capture'); // DOES NOT HAPPEN
}, true);
document.addEventListener('load', function() {
  console.log('document - load - bubble'); // DOES NOT HAPPEN
});
window.addEventListener('load', function() {
  console.log('window - load - bubble'); // 4th
});

window.onload = function() {
  console.log('window - onload'); // 4th
};
document.onload = function() {
  console.log('document - onload'); // DOES NOT HAPPEN
};


5> VincentZHANG..:

在Chrome中,window.onload 与Firefox 不同,但在Firefox(版本35.0)和IE(版本11)中它们是相同的.

您可以通过以下代码段进行探索:



    
        
        
        

        
    

    

        Page contents go here.

    

您将在Chrome控制台中看到"窗口加载"(首先出现)和"正在加载".但是,您将在Firefox和IE中看到"body onload".如果你window.onload.toString()在IE和FF的控制台中运行" ",你会看到:

"function onload(event){bodyOnloadHandler()}"

这意味着赋值"window.onload = function(e)..."被覆盖.



6> 小智..:

window.onloadonunload有快捷键document.body.onloaddocument.body.onunload

document.onload并且onload所有html标签上的处理程序似乎都被保留但从未触发过

' onload'在文档中 - >是的



7> AnthonyWJone..:

window.onload然而它们通常是同一件事.同样,body.onload在IE中成为window.onload.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有