哪个更受支持:window.onload还是document.onload?


当前回答

根据解析HTML文档-结束,

浏览器解析HTML源代码并运行延迟脚本。当所有HTML都已解析并运行时,将在文档中发送DOMContentLoaded。事件将弹出窗口。浏览器加载延迟加载事件的资源(如图像)。在窗口处调度加载事件。

因此,执行顺序为

DOMContentLoaded捕获阶段窗口的事件侦听器DOMContentLoaded文档的事件侦听器DOMContentLoaded处于气泡阶段的窗口的事件侦听器加载窗口的事件侦听器(包括onload事件处理程序)

绝不应调用文档中的气泡加载事件侦听器(包括onload事件处理程序)。只能调用捕获加载侦听器,但这是由于子资源(如样式表)的加载,而不是由于文档本身的加载。

window.addEventListener('DOMContentLoaded',函数(){console.log('窗口-DOMContentLoaded-捕获');//第一},true);document.addEventListener('DOMContentLoaded',函数(){console.log('文档-DOMContentLoaded-捕获');//第二},true);document.addEventListener('DOMContentLoaded',函数(){console.log('文档-DOMContentLoaded-气泡');//第二});window.addEventListener('DOMContentLoaded',函数(){console.log('窗口-DOMContentLoaded-气泡');//第三});window.addEventListener('load',函数(){console.log('窗口-加载-捕获');//第四},true);document.addEventListener('load',函数(e){/*筛选出与文档无关的加载事件*/if([style','script'].indexOf(e.target.tagName.toLowerCase())<0)console.log('文档-加载-捕获');//不会发生},true);document.addEventListener('load',function(){console.log('文档-加载-气泡');//不会发生});window.addEventListener('load',函数(){console.log('窗口-加载-气泡');//第四});window.onload=函数(){console.log('窗口-加载');//第四};document.onload=函数(){console.log('文档-加载');//不会发生};

其他回答

window.onload和onunload是document.body.onload和document.body_onload的快捷方式

所有html标记上的document.onload和onload处理程序似乎是保留的,但从未触发

文档中的“onload”->true

然而,它们通常是相同的。类似地,body.onload在IE中变为window.onload。

然而,Window.onload是标准的——PS3中的web浏览器(基于Netfront)不支持窗口对象,因此您不能在那里使用它。

在Chrome中,window.onload与<body onload=“”>不同,而在Firefox(35.0版)和IE(11版)中它们都是相同的。

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

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <!--import css here-->
        <!--import js scripts here-->

        <script language="javascript">

            function bodyOnloadHandler() {
                console.log("body onload");
            }

            window.onload = function(e) {
                console.log("window loaded");
            };
        </script>
    </head>

    <body onload="bodyOnloadHandler()">

        Page contents go here.

    </body>
</html>

您将在Chrome控制台中看到“窗口加载”(这是第一个)和“主体加载”。然而,你会在Firefox和IE中看到“body onload”。如果你在IE&FF的控制台中运行“window.onload.toString()”,你会看到:

“函数onload(event){bodyOnloadHandler()}”

这意味着赋值“window.onload=函数(e)…”被覆盖。

添加事件侦听器

<script type="text/javascript">
  document.addEventListener("DOMContentLoaded", function(event) {
      /* 
        - Code to execute when only the HTML document is loaded.
        - This doesn't wait for stylesheets, 
          images, and subframes to finish loading. 
      */
  });
</script>

2017年3月更新

1香草JavaScript

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

2 jQuery

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

Good Luck.