特定のプラグインが利用可能かどうかを確認する方法はありますか?
ロードされている別のプラグインに依存するプラグインを開発していると想像してください。
たとえば、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と重複する問題が発生する可能性があります。
if ($.isFunction(jQuery.fn.pluginName)) { ... }
が少なくとも関数であることも保証します。
window.jQuery
が設定されない限り、コールバックは実行されず、正常に機能しますが、次のように動作します。 jクエリプラグインをロードし、それをチェックするには、のようなjquery select関数を呼び出す必要がありjQuery().pluginName
ますが、LoadScript("jquery+plugin.js",jquery().plugin)
jquery()のような関数パラメーターを渡すと、まだ存在しません
適切なjQueryプラグイン(fn名前空間を拡張するプラグイン)について話している場合、プラグインを検出する適切な方法は次のとおりです。
if(typeof $.fn.pluginname !== 'undefined') { ... }
または、すべてのプラグインがtrueに相当する値を持つことがほぼ保証されているため、短い方を使用できます
if ($.fn.pluginname) { ... }
ところで、プラグインの奇妙に見えるラッパーが示すように、$とjQueryは交換可能です。
(function($) {
//
})(jQuery))
閉鎖
(function($) {
//
})
その直後に、パラメーターとしてjQueryを「渡す」そのクロージャーへの呼び出しが続く
(jQuery)
クロージャーの$はjQueryと等しく設定されます
function isPluginLoaded(plugin) { return !!$.fn[plugin] }
if(typeof $.fn.pluginname != 'undefined')
$
また、jQueryは(WordPressなどで)非競合モードでロードできるため、常に互換性jQuery
があるわけではありません。これにより、私は常に準備ができた、競合のない安全なドキュメントを使用するようになりました。または、指摘したように、私の気分/ニーズに応じて、閉鎖パターン:(ところで、あなたが推奨するチェックが私が好むチェックなので、賛成投票されます)jQuery(function($) { // $ is safe in here.... });
(function($) { // $ is safe in here.... })(jQuery);
jQueryには、何かが関数かどうかをチェックするメソッドがあります
if ($.isFunction($.fn.dateJS)) {
//your code using the plugin
}
APIリファレンス:https : //api.jquery.com/jQuery.isFunction/
DateJSライブラリをプラグインにバンドルし、それを行ったことを文書化することを強くお勧めします。依存関係を追い詰めなければならないほどイライラするものはありません。
ただし、法的な理由により、すべてをバンドルできるとは限りません。また、Eran Galperinの回答を使用して、慎重にプラグインの存在を確認することも害はありません。