特定のプラグインが利用可能かどうかを確認する方法はありますか?
ロードされている別のプラグインに依存するプラグインを開発していると想像してください。
たとえば、jQuery Validation プラグインで dateJS ライブラリを使用して、特定の日付が有効かどうかを確認したいとします。dateJS が利用可能な場合、jQuery Valdation プラグインで検出する最良の方法は何でしょうか?
特定のプラグインが利用可能かどうかを確認する方法はありますか?
ロードされている別のプラグインに依存するプラグインを開発していると想像してください。
たとえば、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
}
DateJS ライブラリをプラグインにバンドルし、それを行ったという事実を文書化することを強くお勧めします。依存関係を探し出すことほどイライラすることはありません。
とはいえ、法的な理由により、常にすべてをバンドルできるとは限りません。Eran Galperin's answerを使用してプラグインの存在を慎重に確認することも決して害はありません。
この種のアプローチは機能するはずです。
var plugin_exists = true;
try {
// some code that requires that plugin here
} catch(err) {
plugin_exists = false;
}