jQueryプラグインがロードされているかどうかを確認するにはどうすればよいですか?


221

特定のプラグインが利用可能かどうかを確認する方法はありますか?

ロードされている別のプラグインに依存するプラグインを開発していると想像してください。

たとえば、jQuery ValidationプラグインでdateJSライブラリを使用して、指定された日付が有効かどうかを確認します。dateJSが利用可能である場合、jQuery Valdationプラグインで検出する最良の方法は何ですか?



回答:


364

一般的に言えば、jQueryプラグインはjQueryスコープの名前空間です。名前空間が存在するかどうかを確認する簡単なチェックを実行できます。

 if(jQuery().pluginName) {
     //run plugin dependent code
 }

ただし、dateJsはjQueryプラグインではありません。これは、javascript日付オブジェクトを変更/拡張し、jQuery名前空間として追加されません。必要なメソッドが存在するかどうかを確認できます。次に例を示します。

 if(Date.today) {
      //Use the dateJS today() method
 }

ただし、APIがネイティブのDate APIと重複する問題が発生する可能性があります。


63
if(jQuery.fn.pluginName){...}は別のオプションです
Nagyman

6
多分少しやりすぎかもしれませんが、それif ($.isFunction(jQuery.fn.pluginName)) { ... }が少なくとも関数であることも保証します。
Noyo

スクリプトをロードする関数 `LoadScript(location、namespcae、callBack)`があります。コールバック関数は一定の間隔でワープされます。つまり、ネームスペースwindow.jQueryが設定されない限り、コールバックは実行されず、正常に機能しますが、次のように動作します。 jクエリプラグインをロードし、それをチェックするには、のようなjquery select関数を呼び出す必要がありjQuery().pluginNameますが、LoadScript("jquery+plugin.js",jquery().plugin)jquery()のような関数パラメーターを渡すと、まだ存在しません
Hassan Nisar Khan

97

適切なjQueryプラグイン(fn名前空間を拡張するプラグイン)について話している場合、プラグインを検出する適切な方法は次のとおりです。

if(typeof $.fn.pluginname !== 'undefined') { ... }

または、すべてのプラグインがtrueに相当する値を持つことがほぼ保証されているため、短い方を使用できます

if ($.fn.pluginname) { ... }

ところで、プラグインの奇妙に見えるラッパーが示すように、$とjQueryは交換可能です。

(function($) {
    //
})(jQuery))

閉鎖

(function($) {
    //
})

その直後に、パラメーターとしてjQueryを「渡す」そのクロージャーへの呼び出しが続く

(jQuery)

クロージャーの$はjQueryと等しく設定されます


2
私は関数を作成しましたfunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
スタイル

2
最初の例はif(typeof $.fn.pluginname != 'undefined')
dops

1
@dopsは正しいので、それに応じて回答を編集しましたが、タイプと値の両方を比較するために、二重の等価ではなく否定のトリプルを使用しました。
pwdst

1
$また、jQueryは(WordPressなどで)非競合モードでロードできるため、常に互換性jQueryがあるわけではありません。これにより、私は常に準備ができた、競合のない安全なドキュメントを使用するようになりました。または、指摘したように、私の気分/ニーズに応じて、閉鎖パターン:(ところで、あなたが推奨するチェックが私が好むチェックなので、賛成投票されます)jQuery(function($) { // $ is safe in here.... });(function($) { // $ is safe in here.... })(jQuery);
random_user_name

11

jQueryプラグインを検出するために、角かっこを使用する方がより正確であることがわかりました。

if(jQuery().pluginName) {
    //run plugin dependent code
}

8

fn名前空間を使用しないプラグイン(たとえば、pnotify)の場合、これは機能します。

if($.pluginname) {
    alert("plugin loaded");
} else {
    alert("plugin not loaded");
}

これは機能しません:

if($.fn.pluginname)

ありがとう。別の例-Jquery Cookieプラグイン
ymakux '


1

DateJSライブラリをプラグインにバンドルし、それを行ったことを文書化することを強くお勧めします。依存関係を追い詰めなければならないほどイライラするものはありません。

ただし、法的な理由により、すべてをバンドルできるとは限りません。また、Eran Galperinの回答を使用して、慎重にプラグインの存在を確認することも害はありません。


1

選択したブラウザコンソールでこれを実行します。

if(jQuery().pluginName){console.log('bonjour');}

プラグインが存在する場合、「bonjour」がコンソールの応答として出力されます。


-1

この種のアプローチはうまくいくはずです。

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}

6
簡単に検出できる(そして検出する必要がある)ものをキャッチすることに反対票を投じようとするところがほとんどです
pwdst
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.