我正在执行一个外部脚本,使用<脚本>内<头>。
现在,由于脚本在页面加载之前执行,我不能访问<body>等。我想在文档被“加载”(HTML完全下载并在ram中)后执行一些JavaScript。是否有任何事件,我可以挂钩到当我的脚本执行,这将在页面加载触发?
我正在执行一个外部脚本,使用<脚本>内<头>。
现在,由于脚本在页面加载之前执行,我不能访问<body>等。我想在文档被“加载”(HTML完全下载并在ram中)后执行一些JavaScript。是否有任何事件,我可以挂钩到当我的脚本执行,这将在页面加载触发?
当前回答
如果脚本是在文档的<head>中加载的,那么可以在script标记中使用defer属性。
例子:
<script src="demo_defer.js" defer></script>
从https://developer.mozilla.org:
推迟 此布尔属性被设置为向浏览器指示脚本 意味着在解析文档之后执行,但在解析之前 发射DOMContentLoaded。内 如果src 属性不存在(即对于内联脚本),在这种情况下它会 没有效果。 为实现动态插入脚本使用的类似效果 异步= false。具有defer属性的脚本将在 它们在文档中出现的顺序。
其他回答
看钩文件。jQuery $(document).load(…)
有一个关于如何使用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" );
});
$(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>
我建议使用asnyc属性的脚本标签,这有助于你加载页面加载后的外部脚本
<script type="text/javascript" src="a.js" async></script>
<script type="text/javascript" src="b.js" async></script>
这是一个基于延迟js加载的脚本,在页面加载后,
<script type="text/javascript">
function downloadJSAtOnload() {
var element = document.createElement("script");
element.src = "deferredfunctions.js";
document.body.appendChild(element);
}
if (window.addEventListener)
window.addEventListener("load", downloadJSAtOnload, false);
else if (window.attachEvent)
window.attachEvent("onload", downloadJSAtOnload);
else window.onload = downloadJSAtOnload;
</script>
我该把它放在哪里?
将代码粘贴到</body>标记之前(靠近HTML文件的底部)。
它能做什么?
此代码表示等待整个文档加载,然后加载 外部文件deferredfunctions.js。
这是上面代码的一个例子- JS的延迟渲染
我写这个基于延迟加载javascript页面速度谷歌的概念,也从这篇文章延迟加载javascript