jQueryプラグインがロードされているかどうかを確認するにはどうすればよいですか?
-
03-07-2019 - |
質問
特定のプラグインが使用可能かどうかを確認する方法はありますか?
ロードされる別のプラグインに依存するプラグインを開発していると想像してください。
たとえば、jQuery ValidationプラグインでdateJSライブラリを使用して、指定された日付が有効かどうかを確認します。 dateJSが利用可能な場合、jQuery Valdationプラグインで検出する最良の方法は何ですか?
解決
一般的に、jQueryプラグインはjQueryスコープの名前空間です。単純なチェックを実行して、名前空間が存在するかどうかを確認できます。
if(jQuery().pluginName) {
//run plugin dependent code
}
ただし、dateJsはjQueryプラグインではありません。 javascript日付オブジェクトを変更/拡張し、jQuery名前空間として追加されません。必要なメソッドが存在するかどうかを確認できます。例:
if(Date.today) {
//Use the dateJS today() method
}
ただし、APIがネイティブのDate APIと重複する問題が発生する可能性があります。
他のヒント
適切なjQueryプラグイン(fn名前空間を拡張する)について話している場合、プラグインを検出する適切な方法は次のとおりです。
if(typeof $.fn.pluginname !== 'undefined') { ... }
または、すべてのプラグインがtrueと等しい値を持つことがほぼ保証されているため、短い方を使用できます
if ($.fn.pluginname) { ... }
ところで、プラグインの奇妙な外観のラッパーが示すように、$とjQueryは交換可能です:
(function($) {
//
})(jQuery))
クロージャー
(function($) {
//
})
の直後に、パラメーターとしてjQueryを「渡す」クロージャーの呼び出しが続きます
(jQuery)
クロージャーの$はjQueryと等しく設定されます
jQueryプラグインを検出するには、ブラケットを使用する方が正確であることがわかりました:
if(jQuery().pluginName) {
//run plugin dependent code
}
fn名前空間を使用しないプラグイン(pnotifyなど)の場合、これは機能します:
if($.pluginname) {
alert("plugin loaded");
} else {
alert("plugin not loaded");
}
これは機能しません:
if($.fn.pluginname)
jQueryには、何かが関数かどうかを確認するメソッドがあります
if ($.isFunction($.fn.dateJS)) {
//your code using the plugin
}
APIリファレンス: https://api.jquery.com/jQuery.isFunction/
DateJSライブラリをプラグインにバンドルし、それを行ったことを文書化することを強くお勧めします。依存関係を追い詰めなければならないほどイライラすることはありません。
とはいえ、法的理由により、すべてをバンドルできるとは限りません。また、 Eran Galperinの回答を使用して、注意を払ってプラグインの存在を確認することも害になりません。
選択したブラウザコンソールでこれを実行します。
if(jQuery()。pluginName){console.log( 'bonjour');}
プラグインが存在する場合、" bonjour"が出力されます。コンソールの応答として。
この種のアプローチはうまくいくはずです。
var plugin_exists = true;
try {
// some code that requires that plugin here
} catch(err) {
plugin_exists = false;
}