JavaScript“包含”功能?

时间:2013-09-18 22:45:29

标签: javascript jquery python include

我想知道是否有一个javascript“include”函数(类似于python中的那个),我正在寻找一些但除了$.load()google.load()之外找不到的东西。< / p>

所以,我冒昧地创建了一个脚本,这样做只是为了好玩,所以:

var include = function( lib ) {
// start with jQuery
    if(lib == "jquery") {
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "http://code.jquery.com/jquery.min.js";
        script.defer = "defer"; // should I use script.setAttribute('defer', 'defer')?
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(script, s);
    }
}

然后,在另一个脚本中:

include("jquery");
$("p").innerHTML = "Worked!";

但我收到错误 $未定义

这是有道理的,因为脚本在加载jQuery之前运行。所以我的问题是,有没有办法确保include脚本在之前运行之前的任何其他内容?我看过callback解决方案看起来像这样:

include("http://code.jquery.com/jquery.min.js", function() {
    $("p").innerHTML = "Worked!";
});

但我确实想知道是否有任何东西(比如我上面提出的那样)更加整​​洁。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:6)

你在这里重新发明轮子:有大量的库/组件基本上做同样的工作,但有更多的功能。检查Asynchronous Module Definition APIRequireJS是否有开始。

答案 1 :(得分:0)

由于JavaScript运行的方式,没有办法比那更干净。您可以使用某种间隔来加载所需的所有文件,就像这样。

window.includeFiles = [];
function include(file){
   window.includeFiles.push(file);
}
function initialize(callback){
   for(var i = 0; i < window.includeFiles.length; i++){
      var script = document.createElement("script");
      script.type = "text/javascript";
      script.src = window.includeFiles[i];
      script.defer = "defer"; // should I use script.setAttribute('defer', 'defer')?
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(script, s);
      if((i+1)==window.includeFiles.length){
         callback();
      }
   }
}

基本上这会让你像这样:

include("http://code.jquery.com/jquery.min.js");
include("http://code.jquery.com/jquery.min.js");
include("http://code.jquery.com/jquery.min.js");
include("http://code.jquery.com/jquery.min.js");
include("http://code.jquery.com/jquery.min.js");
initialize(function(){
  //code ready
});

唯一的问题是它不测试网络,只能通过检查包含的库中是否有可用的功能来实现。 Witch让raina77ow回答使用RequireJS更好的解决方案。

答案 2 :(得分:0)

我认为最简单的方法是使用head.js http://headjs.com/

head.js(
  "/path/to/jquery.js", 
  "/google/analytics.js", 
  "/js/site.js", function() {

   // Code that executes when all the scripts have been loaded

});