Javascript延迟函数

Javascript延迟函数,javascript,jquery,html,asynchronous,deferred,Javascript,Jquery,Html,Asynchronous,Deferred,我一直在研究JavaScript,试图获得一些异步加载的代码 我找到了这个代码示例 <script type="text/javascript"> function downloadJSAtOnload() { var element = document.createElement("script"); element.src = "defer.js"; document.body.appendChild(element); } if (window.addEve

我一直在研究JavaScript,试图获得一些异步加载的代码

我找到了这个代码示例

<script type="text/javascript">
function downloadJSAtOnload() {
   var element = document.createElement("script");
   element.src = "defer.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>

函数downloadJSAtOnload(){
var元素=document.createElement(“脚本”);
element.src=“defer.js”;
document.body.appendChild(元素);
}
if(window.addEventListener){
addEventListener(“加载”,downloadJSAtOnload,false);
}
else if(窗口附件){
window.attachEvent(“onload”,downloadJSAtOnload);
}
否则{
window.onload=下载jsatonload;
}


问题是它没有达到我想要达到的目标。我希望能够做一些类似的事情,但设置一个延迟或某种类型的函数,在加载完这些之后调用。可能吗?如果是这样的话,有人能解释一下如何加载吗?

您可以尝试使用正在加载的
脚本
标记的
onload
事件。请参见此问题,例如:。然而,这种机制似乎相当粗略,可能不是跨浏览器的

另一种可能的方法是让正在加载的脚本触发一个事件,该事件可以由页面上现有的javascript处理。这对于您的特定情况可能有意义,也可能没有意义,它要求您控制加载的脚本


最后,现在javascript加载很少成为网站的性能瓶颈。那么,为什么要尝试动态加载javascript呢?您是否可以通过加载其他资源(例如,通过执行AJAX请求)来解决相同的问题?

您已经在问题上标记了jQuery。它有
$.getScript()
,它完全以跨浏览器的方式满足您的要求。它将异步加载脚本,然后在脚本完成加载和初始化后调用指定的回调:

$.getScript("defer.js", function() {
    // script loaded here
    // you can run code here that uses that script
});
如果确实希望在加载此脚本之前等待DOM加载(通常不需要),可以执行以下操作:

$(document).ready(function() {
    $.getScript("defer.js", function() {
        // script loaded here
        // you can run code here that uses that script
    });
});
或者,等待加载包括图像在内的所有其他资源:

$(window).load(function() {
    $.getScript("defer.js", function() {
        // script loaded here
        // you can run code here that uses that script
    });
});


如果您对加载脚本时的一些参考感兴趣(特别是使用
defer
async
属性,您可以阅读。

不清楚您想要实现什么。您似乎希望动态地将一些JavaScript加载到页面中。我甚至不确定这是否合法。您的逻辑意图是什么?这是指google pagespeed告诉您要消除的在折叠上方呈现阻塞js。是的,这只是意味着将js移动到页面底部。这是指google pagespeed告诉您消除折叠上方呈现阻塞js。我已将css和js分为两类,页面显示所需和非必需。也许我可以使用ajax加载不需要的内容在页面完全加载之后。感谢您的提示,我将检查ajax。