it-roy-ru.com

Как я могу проверить, загружен ли плагин jQuery?

Есть ли способ проверить, доступен ли конкретный плагин?

Представьте, что вы разрабатываете плагин, который зависит от загружаемого другого плагина.

Например, я хочу, чтобы плагин проверки jQuery использовал библиотеку dateJS, чтобы проверить, является ли данная дата действительной. Как лучше всего определить в плагине jQuery Valdation, доступна ли dateJS?

212
Vitor Silva

Вообще говоря, плагины jQuery - это пространства имен в области jQuery. Вы можете запустить простую проверку, чтобы увидеть, существует ли пространство имен:

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

dateJs, однако, не является плагином jQuery. Он изменяет/расширяет объект даты javascript и не добавляется как пространство имен jQuery. Вы можете проверить, существует ли нужный вам метод, например:

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

Но вы можете столкнуться с проблемами, когда API перекрывает собственный API Date.

344
Eran Galperin

Если мы говорим о правильном плагине jQuery (который расширяет пространство имен fn), то правильный способ обнаружить плагин:

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

Или потому что каждый плагин в значительной степени имеет определенное значение, равное true, вы можете использовать более короткий

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

Кстати, $ и jQuery взаимозаменяемы, как странно выглядит оболочка вокруг плагина демонстрирует:

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

закрытие

(function($) {
    //
})

немедленно сопровождается вызовом к этому закрытию, передавая jQuery в качестве параметра

(jQuery)

$ в замыкании устанавливается равным jQuery

87
rmirabelle

Для обнаружения плагинов jQuery я нашел более точным использование скобок:

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

для плагинов, которые не используют пространство имен fn (например, pnotify), это работает:

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

Это не работает:

if($.fn.pluginname)
8
trante

у jQuery есть метод, чтобы проверить, является ли что-то функцией

if ($.isFunction($.fn.dateJS)) {
    //your code using the plugin
}

Справочник по API: https://api.jquery.com/jQuery.isFunction/

2
x-freestyler

Я настоятельно рекомендую вам связать библиотеку DateJS с вашим плагином и задокументировать тот факт, что вы это сделали. Нет ничего более неприятного, чем выслеживание зависимостей.

Тем не менее, по юридическим причинам, вы не всегда можете объединить все. Также никогда не повредит быть осторожным и проверять наличие плагина, используя ответ Эрана Гальперина .

1
Soviut

Запустите это в выбранной вами консоли браузера.

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

Если плагин существует, он выведет "bonjour" в качестве ответа в вашей консоли.

1
Joshua Pekera