2

HTML5 Boilerplate 4.0 を使用して新しいサイトを構築していますが、jQuery ローカル フォールバック コードで問題が発生しています。問題のコードは次のとおりです。

<!-- <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script> -->
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.1.min.js"><\/script>')</script>
<script src="js/plugins.js"></script>
<script src="js/main.js"></script>

今のところローカルで開発しているので、CDN 行をコメントアウトしました。私の問題は、jQuery が読み込まれることですが、plugins.js と main.js の後に読み込まれるため、未定義のエラーが発生します。

おそらく私が見つけた説明に最も近いのは、この前の回答の #4 ポイントです。厳しく吟味されました。私は何かが欠けているに違いない、はい?

4

3 に答える 3

0

私は少し前に同様の質問に答えました。

あなたはこのようなことをすることができます:

function loadScript(pathToScript, callback) {

    if (/jquery/.test(pathToScript) && window.jQuery) {
        //jQuery has already been loaded so simply call the callback
        callback.apply();

    } else {
        var head = document.getElementsByTagName("head")[0];
        var script = document.createElement("script");

        script.type = "text/javascript";
        script.src = pathToScript + "?t=" + new Date().getTime(); //prevent caching

        if (callback) {
            script.onload = callback;
        }

        head.appendChild(script);
    }
}

var scripts = ['js/vendor/jquery-1.8.1.min.js', 'js/plugins.js', 'js/main.js'];

(function (i) {
    if (i < scripts.length) {
        var self = arguments.callee;

        loadResource(scripts[i], function () {
            self(++i);
        });
    }
})(0);
于 2012-09-07T18:12:10.590 に答える
0

この問題について StackOverflow で正確な回答を見つけることもできませんでしたが、このページが主題をカバーしているようです:

要約すると、真に堅牢なフェイルオーバー ソリューションを作成するのは簡単ではありません。ブラウザーの非互換性、ドキュメントの状態とイベント、依存関係、読み込みの遅延、タイムアウトを考慮する必要があります。ありがたいことに、LABjs のようなツールが存在し、JavaScript ファイルの読み込みを完全に制御できるようにすることで、私たちの負担を軽減してくれます。

注:ソリューションはLABjsの使用に依存しています

于 2012-09-07T18:12:20.690 に答える
0

yepnopeを使用して、フォールバックと並行してスクリプトをロードすることを検討してください。

彼らのウェブサイトから:

yepnope.js には、リソースのフォールバックを実行し、従属スクリプトを最初のスクリプトと並行してダウンロードする機能があります。

そしてコード:

yepnope([{
  load: 'http:/­/ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js',
  complete: function () {
    if (!window.jQuery) {
      yepnope('local/jquery.min.js');
    }
  }
}, {
  load: 'jquery.plugin.js',
  complete: function () {
    jQuery(function () {
      jQuery('div').plugin();
    });
  }
}]);

これが助けになることを願っています!

于 2012-09-07T18:13:41.127 に答える