Javascript 动态脚本加载的最佳方式

Javascript 动态脚本加载的最佳方式,javascript,jquery,internet-explorer,Javascript,Jquery,Internet Explorer,我需要动态地、顺序地加载一些js文件(即第一个加载完成后加载第二个脚本,第二个加载完成后加载第三个脚本,依此类推) 问题:如何检测脚本何时已加载?我遇到了onload事件的问题-它在IE8中没有触发。阅读之后,我尝试订阅onreadystatechange,并编写了非常难看的代码来加载脚本: function loadScript(url, callback) { var isLoaded = false; var script = document.create

我需要动态地、顺序地加载一些js文件(即第一个加载完成后加载第二个脚本,第二个加载完成后加载第三个脚本,依此类推)

问题:如何检测脚本何时已加载?我遇到了onload事件的问题-它在IE8中没有触发。阅读之后,我尝试订阅onreadystatechange,并编写了非常难看的代码来加载脚本:

function loadScript(url, callback) {
        var isLoaded = false;
        var script = document.createElement('script');

        script.onreadystatechange = function () {
            if ((script.readyState == 'complete' || script.readyState == 'loaded') && !isLoaded) {
                if (callback) callback();
            }
        };
        script.setAttribute('type', 'text/javascript');
        script.setAttribute('src', url);
        document.head.appendChild(script);
    };
如果没有这些技巧,你能推荐更好的跨浏览器解决方案吗

UPD: 谢谢你的回答。如果我还需要加载jquery.js(例如,客户端有旧版本):),我该怎么办?

我想您需要的是

该函数采用URL和成功方法,您可以使用该方法链接脚本加载,从而按顺序加载脚本:

jQuery.getScript( url, function() { 
  jQuery.getScript( url2, function() 
    {/*... all 2 scripts finished loading */}
  );
});
:

。。。是一个JavaScript文件和模块加载器。它针对浏览器内使用进行了优化,但也可以用于其他JavaScript环境,如Rhino和Node。使用模块化脚本加载程序(如RequireJS)将提高代码的速度和质量


说它与IE 6+、Firefox2+、Safari 3.2+、Chrome 3+和Opera 10+兼容。

下面是我使用jQuery.getScript()加载多个脚本的代码片段

用法:

var includes = [
    "js/script1.js",
    "js/script2.js",
    "js/script3.js"
];

getScripts(includes, function(){ /* typically a call to your init method comes here */; });

在Chrome中,我们可以使用
onload
onerror
来替换
onreadystatechange

关于您的更新:为什么不包括用于加载脚本的库(例如jQuery)与任何其他JavaScript文件一样:我认为动态添加用于动态加载脚本的库不是一种简单的方法,也没有必要。@Preli,它将被嵌入到另一个带有一个脚本和一个div标记的站点。
var includes = [
    "js/script1.js",
    "js/script2.js",
    "js/script3.js"
];

getScripts(includes, function(){ /* typically a call to your init method comes here */; });