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

221

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

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

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

Витор Сильва
источник

Ответы:

364

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

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

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

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

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

Эран Гальперин
источник
63
if (jQuery.fn.pluginName) {...} - еще один вариант
Надьман
6
Может быть, немного излишним, но if ($.isFunction(jQuery.fn.pluginName)) { ... }также будет гарантировать, что это по крайней мере функция.
Noyo
у меня есть функция, которая загружает сценарий, `LoadScript (location, namespcae, callBack)`, функция обратного вызова деформируется с интервалом, означает, что пока пространство имен т.е. window.jQueryне установлено, обратный вызов не будет работать, он работает нормально, но теперь загрузите плагин запроса aj и проверьте, что мне нужно вызвать функцию выбора jquery jQuery().pluginName, но когда я передаю его, мой параметр функции, например, LoadScript("jquery+plugin.js",jquery().plugin)jquery (), дозы еще не существует
Хасан Нисар Кхан
97

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

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

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

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

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

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

закрытие

(function($) {
    //
})

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

(jQuery)

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

rmirabelle
источник
2
Я сделал функциюfunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
Styfle
2
Первый пример должен бытьif(typeof $.fn.pluginname != 'undefined')
dops
1
@dops является правильным, и я соответственно отредактировал ответ, хотя я использовал отрицательную тройку, а не двойное равенство, чтобы сравнить и тип, и значение.
pwdst
1
$и jQueryне всегда взаимозаменяемы, так как jQuery может (например, в WordPress) загружаться в бесконфликтном режиме . Это заставило меня всегда использовать сокращенный, готовый к конфликту документ, 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)
trante
источник
Спасибо. Другой пример - плагин
Jquery
1

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

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

Soviut
источник
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;
}
ceejayoz
источник
6
Почти искушение понизить голос за то, что вы можете (и должны) легко обнаружить
pwdst