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

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

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

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

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

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

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

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

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

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

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

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

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

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

 (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) 

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

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

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

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

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

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

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

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

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

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

  • Может ли jQuery добавлять запятые, когда пользователь вводит цифры?
  • Прокрутка jQuery В нижней части страницы
  • jQuery datepicker - 2 ввода / текстовые поля и ограничивающий диапазон
  • Разбирайте RSS с помощью jQuery
  • Как я могу расширить jQueryUI datepicker, чтобы принять дополнительный аргумент?
  • Зачем возвращать this.each (function ()) в плагинах jQuery?
  • jQuery Validate - требует, по крайней мере, одного поля в заполняемой группе
  • Удаленный модальный модуль Twitter загружает одно и то же содержимое каждый раз
  • Выпадающее меню jQuery multiselect
  • Заполнитель HTML5 исчезает в фокусе
  • Предварительный просмотр веб-страницы jQuery
  • Interesting Posts

    Как сохранить ту же настройку с 4 мониторами при использовании удаленного рабочего стола в Windows 7?

    Как отключить комбинацию клавиш Option-Space для неразрывных пробелов?

    Intel HD4000 с выходом 4k HDMI на Linux

    Компьютер Windows 7 не может подключиться к Wi-Fi, используя любой адаптер

    Как я могу запустить hostnetwork в Windows 8

    Выбор текста в фокусе с использованием jQuery, не работающего в Safari и Chrome

    Как я могу получить и использовать заголовочный файл в моей программе на C ++?

    Перенос виртуальных машин VirtualBox на другой компьютер

    Что такое настройка переменной среды PATH по умолчанию при новой установке Windows 7

    подавлять НС в пасте ()

    Ошибка MySQL 1449: пользователь, указанный как определитель, не существует

    Пакетный эквивалент обратных ссылок Баша

    Если я хочу специализироваться только на одном методе в шаблоне, как мне это сделать?

    Как сделать адрес сервера имен постоянным в /etc/resolv.conf?

    Почему не работают ярлыки CTRL + ALT в Google Docs?

    Давайте будем гением компьютера.