多くの異なる 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
- ユーザーのサイトに jQuery がありません
- 私の JS スクリプトは jQuery を動的に読み込み、スクリプトの読み込みが完了するまで待機します
- すべては順調です
ユースケース 2
- ユーザーのサイトには jQuery があり、jQueryUI はありません
- 私の JS スクリプトは jQueryUI のみを動的に読み込み、スクリプトの読み込みが完了するまで待機します
- 私のJSファイルは$.ajaxを呼び出そうとしましたが、失敗しました:(
ユースケース 3
- ユーザーは自分のサイトに jQuery を持っていて、jQueryUI を持っています
- 私のJSスクリプトは何もロードする必要がないので、
- 私のJSファイルは$.ajaxを呼び出そうとしましたが、失敗しました:(
質問は...
jQuery 自体をロードするときに、JS ファイルが$.ajax (およびその他の jQuery 関数) にしかアクセスできないのはなぜですか?