Javascript 动态、跨浏览器脚本加载

Javascript 动态、跨浏览器脚本加载,javascript,internet-explorer,asynchronous,cross-browser,Javascript,Internet Explorer,Asynchronous,Cross Browser,我知道IE没有针对元素的加载事件-有什么方法可以可靠地弥补这一点吗 我看到过一些讨论(例如,requestState==“complete”),但没有什么是可验证的 这将用于在脚本加载完成后调用代码,这样我就不必使用AJAX加载新源代码(从而消除跨域AJAX的问题)。您可以使用类似的脚本加载程序。它有自己的加载回调,也会减少加载时间 从headjs代码中:(稍微修改以便于携带) 这只是伊利亚答案的延伸。我使用scriptTag如下:非常好: // these 3 scripts lo

我知道IE没有针对
元素的
加载
事件-有什么方法可以可靠地弥补这一点吗

我看到过一些讨论(例如,
requestState==“complete”
),但没有什么是可验证的



这将用于在脚本加载完成后调用代码,这样我就不必使用AJAX加载新源代码(从而消除跨域AJAX的问题)。

您可以使用类似的脚本加载程序。它有自己的加载回调,也会减少加载时间


headjs
代码中:(稍微修改以便于携带)


这只是伊利亚答案的延伸。我使用scriptTag如下:非常好:

    // these 3 scripts load serially.

    scriptTag(boot_config.DEPENDENCIES.jquery,function(){
        // jquery ready - set a flag
        scriptTag(boot_config.DEPENDENCIES.jqueryui,function(){
            // jqueryui ready - set a flag
            scriptTag(boot_config.DEPENDENCIES.your_app,function(){
                // your_app is ready! - set a flag
            });
        });
    });

    // these 2 scripts load in paralell to the group above

    scriptTag(boot_config.EXTERNALS.crypto,function(){
        // crypto ready - set a flag
    });

    scriptTag(boot_config.EXTERNALS.cropper,function(){
        // cropper ready - set a flag
    });

我想补充一点,如果你不支持IE7及以下版本,你不需要
onreadystatechange
之类的东西。资料来源:

简化和工作原始答案代码:

function loadScript(src, callback) {    
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.src = src;
    s.async = false;
    if(callback) {
        s.onload = callback;     
    }
    document.body.appendChild(s);
}

您能否在正在加载的脚本中添加一个函数调用,该调用将在脚本被评估时运行,该脚本将成为您的完成回调?恐怕我不明白库如何减少由网络延迟引起的加载时间:)浏览器按顺序加载`。js异步加载它们,但仍然以正确的顺序执行它们。您认为呢?如果您让脚本同时加载,而不是一个接一个地加载,那么所有脚本的加载速度都会更快。也许我不擅长解释,headjs网站上有一个很好的描述。这个方法允许你控制并行和串行加载。它还允许您知道它们何时完成。这比浏览器更好,浏览器只需从上到下同步加载,并且会保留下面的内容。如果一个脚本中的代码依赖于另一个脚本中的代码,那么如果可以,您可能希望将一些脚本连接在一起。
function loadScript(src, callback) {    
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.src = src;
    s.async = false;
    if(callback) {
        s.onload = callback;     
    }
    document.body.appendChild(s);
}