Как я могу проверить, загружен ли плагин jQuery? - PullRequest
212 голосов
/ 30 декабря 2008

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

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

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

Ответы [ 8 ]

344 голосов
/ 30 декабря 2008

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

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

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

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

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

87 голосов
/ 29 марта 2011

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

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

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

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

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

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

закрытие

(function($) {
    //
})
За

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

(jQuery)

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

10 голосов
/ 23 марта 2010

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

if(jQuery().pluginName) {
    //run plugin dependent code
}
8 голосов
/ 04 мая 2013

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

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

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

if($.fn.pluginname)
2 голосов
/ 20 апреля 2017

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

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

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

1 голос
/ 13 июня 2015

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

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

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

1 голос
/ 31 декабря 2008

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

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

0 голосов
/ 30 декабря 2008

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

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...