我们有几个JavaScript文件,它们在主页面底部加载。然而,我遇到的情况是需要在其他脚本加载之前执行一些JavaScript。是否可以等待所有JavaScript文件加载完毕,然后执行一些JavaScript代码?
我原以为$(document).ready()
可以做到这一点,但事实证明不行。当然,我们可以将脚本文件从底部移动到顶部,但我想知道是否有可能实现我的需求。
我们有几个JavaScript文件,它们在主页面底部加载。然而,我遇到的情况是需要在其他脚本加载之前执行一些JavaScript。是否可以等待所有JavaScript文件加载完毕,然后执行一些JavaScript代码?
我原以为$(document).ready()
可以做到这一点,但事实证明不行。当然,我们可以将脚本文件从底部移动到顶部,但我想知道是否有可能实现我的需求。
你可以使用
$(window).on('load', function() {
// your code here
});
这将等待页面加载完成。 $(document).ready()
将等待 DOM 加载完成。
用普通的 JS 写法:
window.addEventListener('load', function() {
// your code here
})
window.addEventListener('load', function() { /* 在这里编写你的代码 */ })
。 - Dave Land您可以使用.getScript()
,在加载完成后运行您的代码:
$.getScript("my_lovely_script.js", function(){
alert("Script loaded and executed.");
// here you can use anything you defined in the loaded script
});
您可以在此处查看更好的解释:如何在另一个JavaScript文件中包含JavaScript文件?
您可以使用<script>
标签的defer
属性。它指定脚本将在页面解析完成后执行。
<script defer src="path/to/yourscript.js">
这篇文章介绍了一个不错的方法:http://davidwalsh.name/script-defer
浏览器支持似乎很好:http://caniuse.com/#search=defer
另一篇关于使用defer和async加载JS的好文章:https://flaviocopes.com/javascript-async-defer/
$(window).on('load', function() {
// your code here
});
使用 async
和 defer
可以很好地处理脚本的加载。
因此,您可以这样导入所有脚本:
<script src="/js/script1.js" async defer></script>
<script src="/js/script2.js" async defer></script>
<script src="/js/script3.js" async defer></script>
请确保script1
在$(window).on('load' ...)
之前不要调用script3
中的函数,确保在window load
事件内调用它们。
有关异步/延迟加载,请点击此处。
这对我有效:
var jsScripts = [];
jsScripts.push("/js/script1.js" );
jsScripts.push("/js/script2.js" );
jsScripts.push("/js/script3.js" );
$(jsScripts).each(function( index, value ) {
$.holdReady( true );
$.getScript( value ).done(function(script, status) {
console.log('Loaded ' + index + ' : ' + value + ' (' + status + ')');
$.holdReady( false );
});
});