我正在执行一个外部脚本,使用<脚本>内<头>。

现在,由于脚本在页面加载之前执行,我不能访问<body>等。我想在文档被“加载”(HTML完全下载并在ram中)后执行一些JavaScript。是否有任何事件,我可以挂钩到当我的脚本执行,这将在页面加载触发?


当前回答

这些解决方案是有效的:

正如注释中提到的,使用defer:

<script src="deferMe.js" defer></script>

or

<body onload="script();">

or

document.onload = function ...

甚至

window.onload = function ...

请注意,最后一个选项是更好的方法,因为它不引人注目,而且被认为更标准。

其他回答

如果你正在使用jQuery,

$(函数 () {...});

等于

美元(文档)。Ready (function () {})

或者另一个简写:

(美元)。Ready (function () {})

查看什么事件JQuery $function()火?和https://api.jquery.com/ready/

看钩文件。jQuery $(document).load(…)

只需定义<body onload=" function ()>,它将在页面加载后被调用。脚本中的代码被function(){}括起来。

$(window).on("load", function(){ ... });

.ready()最适合我。

$(document).ready(function(){ ... });

.load()将工作,但它不会等到页面加载。

jQuery(window).load(function () { ... });

对我不起作用,破坏了下一个内联脚本。我也使用jQuery 3.2.1以及一些其他的jQuery叉子。

隐藏我的网站加载覆盖,我使用以下:

<script>
$(window).on("load", function(){
$('.loading-page').delay(3000).fadeOut(250);
});
</script>

有一个关于如何使用Javascript或Jquery检测文档是否已加载的非常好的文档。

使用本地Javascript可以实现这一点

if (document.readyState === "complete") {
 init();
 }

这也可以在区间内完成

var interval = setInterval(function() {
    if(document.readyState === 'complete') {
        clearInterval(interval);
        init();
    }    
}, 100);

由Mozilla编写

switch (document.readyState) {
  case "loading":
    // The document is still loading.
    break;
  case "interactive":
    // The document has finished loading. We can now access the DOM elements.
    var span = document.createElement("span");
    span.textContent = "A <span> element.";
    document.body.appendChild(span);
    break;
  case "complete":
    // The page is fully loaded.
    console.log("Page is loaded completely");
    break;
}

使用Jquery 仅检查DOM是否准备就绪

// A $( document ).ready() block.
$( document ).ready(function() {
    console.log( "ready!" );
});

要检查是否加载了所有资源,请使用window.load

 $( window ).load(function() {
        console.log( "window loaded" );
    });