首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从javascript代码顺序加载javascript

从javascript代码顺序加载javascript
EN

Stack Overflow用户
提问于 2012-05-31 21:22:13
回答 5查看 6.5K关注 0票数 7

我有一个javascript小部件,通过插入单个脚本标记(因为应用程序应该很容易分发)就可以包含在页面中:

代码语言:javascript
运行
复制
<script type="text/javascript" src="loadMyWidget.js"></script>

然后,loadMyWidget.js需要加载多个脚本文件,这些文件必须按一定的顺序运行。我试图通过将脚本元素插入到DOM中来异步加载它们,但这并不能让我控制顺序。

我也尝试过使用适用于现代浏览器的head.js,但我无法在IE7和8中使用它。

不幸的是,将脚本缩小到一个文件中是很困难的,因为它由来自不同项目的许多文件组成,并且我不知道何时更新脚本。

看起来很简单,我需要按照一定的顺序从javascript代码中加载javascript文件,并让它在所有浏览器中都能工作,包括IE7和8。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-31 22:05:40

我遇到了完全相同的问题,并通过以下方式进行处理:

代码语言:javascript
运行
复制
document.write('<script type="text/javascript" src="other1.js"></script>');
document.write('<script type="text/javascript" src="other2.js"></script>');

runSomeCode();

代码将被加载并同步运行。优点:简单,轻便,跨浏览器兼容,没有开发人员。缺点:丑陋。

更多细节:https://stackoverflow.com/a/3292763/235179

票数 3
EN

Stack Overflow用户

发布于 2012-05-31 21:28:10

如果您正在使用jQuery.getScript(),则可以将其用作$.when(),以将执行推迟到程序停止加载。

如果您所说的“顺序执行”是指您需要在执行之前加载必备组件,则可以使用以下方法

代码语言:javascript
运行
复制
$(function(){
   $.when(
      $.getScript("/script1"),
      $.getScript("/scirpt2"),
      $.getScript("/script3")
}).done(function(){
    // do stuff with the contents of my new script files
});

如果您所说的顺序执行意味着您需要一个接一个地执行文件,请尝试执行以下命令:

代码语言:javascript
运行
复制
$.Deferred()
.then(function () { return $.getScript("/script1"); })
.then(function () { return $.getScript("/scirpt2"); })
.then(function () { return $.getScript("/script3"); })
.resolve();

当然,这需要jQuery,在您编辑之后,这可能不适用于您。

推荐阅读

  • http://api.jquery.com/jQuery.getScript
  • http://api.jquery.com/category/deferred-object/
  • http://api.jquery.com/jQuery.when/
票数 6
EN

Stack Overflow用户

发布于 2012-05-31 21:57:34

如果你需要香草JS,像这样的东西可以工作:

代码语言:javascript
运行
复制
function loadScripts(scripts, complete) {
    var loadScript = function( src ) {
        var xmlhttp, next;
        if (window.XMLHttpRequest)  {
            xmlhttp = new XMLHttpRequest();
        } else {
            try {
                 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e) {
                return;
            }
        }
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                eval(xmlhttp.responseText);
                next = scripts.shift();
                if ( next ) {
                    loadScript(next);
                } else if ( typeof complete == 'function' ) {
                    complete();
                }
            }
        }
        xmlhttp.open("GET", src , true);
        xmlhttp.send();
    };

    loadScript( scripts.shift() );
}

loadScripts(['jquery.js','jquery.plugin.js'], function() {
    console.log('loaded');
});

在Chrome中测试,应该也可以在IE中工作。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10834511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档