在加载<script>内容后加载jQuery.load()吗?</script>

时间:2011-08-30 17:21:50

标签: javascript jquery load

两个问题:

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

  2. 如果以防万一,文档中有<script>将动态注入另一个<script>,则在下载第二个脚本的内容之后运行load()或它会在加载原始的非动态内容后运行吗?

  3. 由于


    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。

    :)

2 个答案:

答案 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>