从javascript代码在DOM中添加外部脚本

从javascript代码在DOM中添加外部脚本,javascript,dom,download,sequence,Javascript,Dom,Download,Sequence,我在正文的末尾包含了3个外部js文件。 假设我的文档已经包含一个名为insertlibs.js的js,下面是代码 var script1 = document.createElement('script'); script1.src='http://code.jquery.com/jquery-latest.js'; script1.type='text/javascript'; document.getElementsByTagName('Body').item(0).appendChild(

我在正文的末尾包含了3个外部js文件。 假设我的文档已经包含一个名为insertlibs.js的js,下面是代码

var script1 = document.createElement('script');
script1.src='http://code.jquery.com/jquery-latest.js';
script1.type='text/javascript';
document.getElementsByTagName('Body').item(0).appendChild(script1);

// Similar way to include underscore

var script2 = document.createElement('script');
script2.src='hhttp://documentcloud.github.com/backbone/backbone-min.js';
script2.type='text/javascript';
document.getElementsByTagName('Body').item(0).appendChild(script2);  
但有时会发生的事情是,它抛出了一个未定义$的错误,我尝试在Firefox中调试,jquery和主干出现了并行下载,有时主干库比jquery更早下载,这导致了这个错误

据我所知,若包含脚本标记,它将阻止进一步的请求,所以只要我在dom中添加jquery。我对这里发生的工作流程感到困惑


所以我找到了解决方案,我合并了js并进行了一个调用,这个调用工作得很好,但这并不能解释上面案例中发生的流程。请提供帮助。

这是因为您试图在不确保jquery已完全加载的情况下包含主干。要纠正这一点,可以使用脚本的onload属性附加一个回调,该回调将在加载jquery时触发

例如:

var script1 = document.createElement('script');
script1.src='http://code.jquery.com/jquery-latest.js';
script1.type='text/javascript';

// add an onload handler
script1.onload = function() {

   // load the rest of the scripts here

   var script2 = document.createElement('script');
   script2.src='hhttp://documentcloud.github.com/backbone/backbone-min.js';
   script2.type='text/javascript';
   document.getElementsByTagName('Body').item(0).appendChild(script2);
}

document.getElementsByTagName('Body').item(0).appendChild(script1);

这是因为您试图在不确保jquery已完全加载的情况下包含主干。要纠正这一点,可以使用脚本的onload属性附加一个回调,该回调将在加载jquery时触发

例如:

var script1 = document.createElement('script');
script1.src='http://code.jquery.com/jquery-latest.js';
script1.type='text/javascript';

// add an onload handler
script1.onload = function() {

   // load the rest of the scripts here

   var script2 = document.createElement('script');
   script2.src='hhttp://documentcloud.github.com/backbone/backbone-min.js';
   script2.type='text/javascript';
   document.getElementsByTagName('Body').item(0).appendChild(script2);
}

document.getElementsByTagName('Body').item(0).appendChild(script1);
据我所知,如果包含脚本标记,它将阻止进一步的请求


否,只有当标签在解析的HTML中正确(或通过
文档插入。在解析过程中写入
时,才会进行阻止/同步下载);动态添加DOM的脚本异步并行加载

要做到这一点,但要确保脚本在满足依赖关系时执行,您需要使用加载程序

据我所知,如果包含脚本标记,它将阻止进一步的请求


否,只有当标签在解析的HTML中正确(或通过
文档插入。在解析过程中写入
时,才会进行阻止/同步下载);动态添加DOM的脚本异步并行加载


要做到这一点,但要确保在满足依赖关系时执行脚本,您需要使用加载器。

否,只有当
标记在解析的HTML中正确(或在解析过程中通过
文档插入
写入
时,才会进行阻止/同步下载);动态加载附加DOM的脚本异步加载。如果希望它们并行下载,则需要使用AMDNo,只有当
标记在解析的HTML中正确时(或在解析过程中通过
文档插入
写入
),才会进行阻止/同步下载;动态加载附加了DOM的脚本。如果您希望它们并行下载,则需要使用AMDThanks techfoobar获取新内容:)感谢techfoobar获取新内容:)