1

コンテンツと並行してスクリプトをロードする Javascript ローダー [ requireJS ] を使用していますが、問題があります。すなわち

require('http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js');

通常-「バックアップ」として-私は使用しました

<script type="text/javascript">
  if (typeof jQuery == 'undefined') {
    document.write(unescape("%3Cscript src='/scripts/jquery-1.4.4.min.js' type='text/javascript'%3E%3C/script%3E"));
  }
</script>

ただし、java-script loader を使用すると、JS とコンテンツが並行してロードされるため、常に jQuery が「未定義」になります。

その効果は基本的に、jQuery 2x をロードしていることです。つまり、1x は JavaScript ローダーを介して、1 つは "jquery == undefined" を介してロードされます。

「バックアップ」をjavascriptローダーで機能させるにはどうすればよいですか?

4

1 に答える 1

1

私の知る限り、requirejs通常は次のように使用されます。

require(['http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'],
    function() {
        // Code that depends on jQuery here.
    }
);

jQueryに依存する関数は、jQueryがロードされたときにのみ呼び出されます。ただし、jQueryの読み込みに失敗した場合、jQueryに依存するコードは実行されません。

この場合、ローカルjQueryを試して使用したいので、スクリプトのロードタイムアウトエラーをキャッチして、別のソースからjQueryをロードしてみてください。(ただし、タイムアウトエラーは遅いことに注意してください。)

ドキュメントにはエラー処理に関する情報はほとんどありません:

エラーを検出するには、オーバーライドrequire.onError()してエラーを取得できます。タイムアウトの問題である場合、onerror関数に渡されるエラーオブジェクトには2つのプロパティが含まれます。

  • requireType:値は「タイムアウト」になります
  • requireModules:タイムアウトしたモジュール名/URLの配列。

私は、コードは次のように見えるかもしれないと思います(テストされていません):

var functionThatDependsOnJquery = function() {
    // Code that depends on jQuery here.
};

require.onError = function(err) {
    # If we have Google jQuery load timeout...
    if (err.requireType = "timeout" &&
        err.requireModules.indexOf('http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js') != -1
        ) {
        # ...we'll try to load it from another source.
        require(['/scripts/localJquery'], functionThatDependsOnJquery);
    }
    # We have another script load timeout, so we just throw an error
    # as requirejs normally does.
    else { throw err; }
};

# Try to load Google jQuery.
require(['http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js'],
    functionThatDependsOnJquery);
于 2011-06-27T06:24:34.740 に答える