2

多くの異なる Web サイトに含めることができるウィジェットを作成しています。このウィジェットでは、jQuery を使用する必要があります。私の顧客は、タグの前に含まれるタグを介して私のウィジェットをインストールし</body>ます (Google アナリティクスの仕組みと同様)

みんなのサイト環境が違うという問題にどう対処したらいいのか、ちょっと途方に暮れています。

</body>現在、私の解決策は、タグの直前に含めるJSコードにjQueryとjQueryUIの両方を動的にロードすることです。ただし、Web サイトにすでに jQuery がロードされている場合、これは問題を引き起こします。

jQueryがすでに含まれているかどうかを検出するために私が検索した1つのソリューション:

if (typeof jQuery == 'undefined') { 
  // include jQuery 
}
if (typeof jQuery.ui == 'undefined')
{
  // include jQueryUI
}

ただし、これにより、jQuery が既に読み込まれている場合に問題が発生しました...彼らの Web サイトに既に jQuery が含まれている場合、私の JS ウィジェットは、顧客の Web サイトから既に読み込まれている jQuery ライブラリにアクセスできないようです。 「$」を認識しないというエラー。

この問題は以前に解決されたと確信していますが、答えが見つからないようです。

アップデート

少し明確にするために...上記のコードは問題ありません。問題は発生しません。ユースケースは次のとおりです。

ユースケース 1

  1. ユーザーのサイトに jQuery がありません
  2. 私の JS スクリプトは jQuery を動的に読み込み、スクリプトの読み込みが完了するまで待機します
  3. すべては順調です

ユースケース 2

  1. ユーザーのサイトには jQuery があり、jQueryUI はありません
  2. 私の JS スクリプトは jQueryUI のみを動的に読み込み、スクリプトの読み込みが完了するまで待機します
  3. 私のJSファイルは$.ajaxを呼び出そうとしましたが、失敗しました:(

ユースケース 3

  1. ユーザーは自分のサイトに jQuery を持っていて、jQueryUI を持っています
  2. 私のJSスクリプトは何もロードする必要がないので、
  3. 私のJSファイルは$.ajaxを呼び出そうとしましたが、失敗しました:(

質問は...

jQuery 自体をロードするときに、JS ファイルが$.ajax (およびその他の jQuery 関数) にしかアクセスできないのはなぜですか?

4

2 に答える 2

0

代わりにこれを使用してみてください:

if(typeof(jQuery) === undefined){
    //load jquery
}
else{
    //jquery already there

    if(typeof(jQuery.ui) === undefined){
        //load jquery ui
    }
}

更新しました

于 2013-10-04T20:21:13.063 に答える