2011-08-30 78 views
2

两个问题:在<script>内容被加载后,jQuery.load()会加载吗?

  1. 是否的<script>内容后jQuery.load()运行完全下载?

  2. 如果在情况下,是将动态地注入另一<script>文档中的<script>load()运行后不后的第2个脚本的内容被下载,否则将运行后,原来的非动态内容加载?

由于


的例子为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

请提供一个示例来帮助解释您在说什么。 – FishBasketGordo

+0

你怎样调用.load()?根据我的经验,它会按照它的名称运行。因此,如果在加载动态脚本之前调用.load(),它将在动态脚本之前运行,但是,如果在加载动态脚本后调​​用它,它应该在其后运行。 – kushaldsouza

回答

1

如果你把load事件处理程序的标准document ready事件处理程序的包装内,这将确保外部脚本首先被加载。你应该考虑这个标准做法。解决方法很简单:当所有的初始HTML所引用的资源已经被下载(或万一超时有错误)

<script src="myscrip1.js"></script> 
<script> 
$(document).ready(function() { 
    $(document).load(myscript2.functionA); 
}); 
</script> 
+0

不起作用。因为myscript2.js会在$(document).ready ... $ documetn(load)...之后运行。因此,myscript2.functionA将是未定义的。 原因是$ document.ready将在myscript1准备好并加载后执行,这是原始HTML文档中的代码。动态脚本代码不会成为准备好并加载的HTML文档的一部分。 – murvinlai

3

文档准备好事件。如果您动态地将引用注入另一个脚本(如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();