在 Google Chrome 上,Window 比 DOM 更先加载 jQuery

Posted

技术标签:

【中文标题】在 Google Chrome 上,Window 比 DOM 更先加载 jQuery【英文标题】:Window is loading first than DOM with jQuery on Google Chrome 【发布时间】:2018-06-14 15:00:07 【问题描述】:

我是 jQuery 新手。我知道 DOM 内容将首先加载,然后 window.onload 事件将发生,因为必须加载所有样式表和图像。 但是下面的代码对我来说并不是这样

 <!DOCTYPE html>
<html>
    <head>
        <title>Add Event Listener</title>
        <script type="text/javascript" src="../jquery-3.2.1.js"></script>
        <script type="text/javascript" >
            $(document).ready(function()
                alert("DOM Loaded");
            );
            $(window).on("load",function()
                alert("Window Loaded");
            );</script>
    </head>
    <body>

    </body>
</html>

在 Google Chrome (63.0.3239.108) 上打开它后,我收到一个警告,在“DOM 已加载”警报之前,窗口已加载。 与 Microsoft Edge (40.15063.0.0) 相同的问题

但是,这适用于 Firefox(57.0.3)

谁能解释一下?

提前致谢! 这个问题不是重复的

window.onload seems to trigger before the DOM is loaded (JavaScript)

【问题讨论】:

【参考方案1】:

那是因为您在没有任何要加载的图像的情况下对其进行测试...

所以所有的标记都已经被解析并加载了。所以load 事件发生了。 然后当脚本被解析后,就会出现ready

当有图像要加载时,通常是解析速度更快的脚本。

看看下面有一个时会发生什么。

$(document).ready(function()
  alert("DOM Loaded");
);
$(window).on("load",function()
  alert("Window Loaded");
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<img src="https://static.pexels.com/photos/132037/pexels-photo-132037.jpeg">

【讨论】:

【参考方案2】:

它们是事件,由正在实现的状态触发。它们不是相互依赖的事件,因此它们没有固定的顺序。

window.onload 在 html 文档中声明的所有资源都下载后触发。

document.onload 在 dom 构建后触发。

它们不相互依赖。可以在下载最后一个资源之前构建 dom。所有资源都可以在 dom 构建之前下载。

【讨论】:

这也是一个很好的答案。请注意,这意味着这些事件的顺序实际上是未定义的。在 chrome 中,它可能会第一次加载窗口并记录另一个。

以上是关于在 Google Chrome 上,Window 比 DOM 更先加载 jQuery的主要内容,如果未能解决你的问题,请参考以下文章

window.open 用于 Google 地图 - iPhone 上的灰屏 Google Chrome

“将图像另存为..”在使用 window.open() 和 document.write() 时无法在 Google Chrome 中运行

分辨率验证工具 - Window Resizer的使用 - Google扩展工具

我可以使用Google Chrome扩展程序阻止警报()

谷歌浏览器(Google Chrome)开发调试详细介绍

如何解决ajax在google chrome浏览器上失效