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

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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

закрытие

(function($) {
    //
})

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

(jQuery)

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

Ответ 3

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

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

Ответ 4

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

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

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

if($.fn.pluginname)

Ответ 5

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

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

Ссылка на API: https://api.jquery.com/jQuery.isFunction/

Ответ 6

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

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

Ответ 7

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

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

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

Ответ 8

Такой подход должен работать.

var plugin_exists = true;

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