2

JavaScriptの「インクルード」機能(Pythonの機能に似ています)があるかどうか疑問に思っていましたが、何かを探していましたが$.load()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

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 は、RequireJS を使用するという raina77ow の回答をより優れたソリューションにしています。

于 2013-09-18T22:58:19.130 に答える