2

$.load()我想知道是否有一个javascript“包含”函数(类似于python中的那个),我正在寻找一些东西,但除了and之外找不到任何东西google.load()

所以,我冒险创建了一个脚本,它可以只是为了好玩,所以:

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!";

但我有一个错误$ is not defined

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

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

但我确实想知道是否有任何东西(就像我上面提出的那样)更简洁一些。

任何帮助将非常感激!

4

3 回答 3

6

你在这里重新发明轮子:有大量的库/组件在做基本相同的工作,但功能更多。首先检查异步模块定义 APIRequireJS

于 2013-09-18T22:48:18.307 回答
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

});
于 2013-09-19T01:47:37.283 回答
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的答案成为更好的解决方案。

于 2013-09-18T22:58:19.130 回答