特定のプラグインが利用可能かどうかを確認する方法はありますか?
ロードされている別のプラグインに依存するプラグインを開発していると想像してください。
たとえば、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's answer を使用してチェックすることも決して痛いことはありません。
選択したブラウザコンソールでこれを実行します。
if(jQuery().pluginName){console.log('bonjour');}
プラグインが存在する場合、コンソールに応答として「bonjour」が出力されます。