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

StackOverflow https://stackoverflow.com/questions/400916

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

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

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

завершение

(function($) {
    //
})

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

(jQuery)

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

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

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

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

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

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

if($.fn.pluginname)

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

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

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

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

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

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

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

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

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

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top