代码之家  ›  专栏  ›  技术社区  ›  Bite code

如何动态加载Javascript文件并立即使用它们?

  •  3
  • Bite code  · 技术社区  · 16 年前

    function addJS(url) {
      $("body").append('<script type="text/javascript" src='+url+'></script>'); 
    }
    

    function core() {...}
    alert("I'am here !");
    

    addJS("lib.js");
    c = new core();
    

    <html>
      <head>
        <title>test</title>        
        <script type="text/javascript" src="init.js"></script> 
      </head>
      <body>
         Hello
      </body>
    </html>
    

    编辑

    5 回复  |  直到 16 年前
        1
  •  3
  •   gregers    16 年前
        2
  •  5
  •   Paolo Bergantino    16 年前

    您会得到“核心未定义”错误,因为脚本是异步加载的。这意味着您的浏览器将在后台开始加载lib.js,并继续执行init.js,然后在lib.js加载完成之前遇到“new core()”。

    getScript函数有一个回调,将在脚本加载完成后触发:

    $.getScript('lib.js', function() {
        var c = new core();
    });
    
        3
  •  1
  •   Jeff Meatball Yang    16 年前

    请注意,您的addJS函数正在附加到body元素的末尾。

    c = new core() 
    

    将在加载lib.js脚本之前运行(在body元素的末尾)。

        4
  •  1
  •   jrharshath    16 年前

    国际海事组织认为,在文档末尾附加脚本标签以加载脚本相当难看。原因:

    1. 您相信浏览器会自动获取脚本并加载它。
    2. 您无法确定脚本是否正在加载、是否已加载,或者是否遇到错误(可能是404?)

    然而,第二种方法有一些问题:如果你在函数内调用eval(),那么脚本在函数外将不可用!这要求采取变通办法。..

        5
  •  1
  •   Karl Guertin    16 年前

    针对代码失败的原因:在正文中添加脚本标签不会阻止进一步的脚本执行。您的代码会添加它,从而启动浏览器下载过程。与此同时,你的脚本试图调用 core() lib.js 尚未完成下载。jQuery之所以有效,是因为它会等到脚本下载完成后再执行回调函数。

    推荐文章