两个问题:
完全下载jQuery.load()
的内容后<script>
是否会运行?
如果以防万一,文档中有<script>
将动态注入另一个<script>
,则在下载第二个脚本的内容之后运行load()
或它会在加载原始的非动态内容后运行吗?
由于
2)问题的例子就是:
<html>
<head>
<script src="myscrip1.js"></script>
<script>
$(document).load( myscript2.functionA );
</script>
</head>
</html>
myscript.js会将myscript2.js注入dom。 其中myscript2.js包含函数myscript2.functionA
显然,我想在myscript2.js完全加载后运行myscript2.functionA。
:)
答案 0 :(得分:3)
当初始HTML中引用的所有资源都已下载时(或者在出现错误时超时),将触发文档就绪事件。如果您动态地将引用注入另一个脚本(例如facebook api,google analytics等),那么与文档就绪事件相关的准备就绪是未定义的。
如果要检查外部脚本是否准备就绪,可以检查它创建的对象是否为been loaded。
<script type="text/javascript">
var startAfterJqueryLoaded = function(){
if(typeof jQuery === "undefined" ) {
setTimeout( startAfterJqueryLoaded, 100 );
return;
}
// jQuery is ready, do something
}
startAfterJqueryLoaded();
</script>
或者,如果你控制了动态注入的脚本,你可以建立一个它准备就绪时会调用的全局函数。
<script type="text/javascript">
window.dynamicScriptIsReady = function(){
// do something
}
</script>
// Dynamic.js
// ...Setup whatever
window.dynamicScriptIsReady();
答案 1 :(得分:1)
如果将load
事件处理程序放在标准document ready
事件处理程序包装器中,它将确保首先加载外部脚本。你应该考虑这个标准做法。解决方案很简单:
<script src="myscrip1.js"></script>
<script>
$(document).ready(function() {
$(document).load( myscript2.functionA );
});
</script>