Як я можу перевірити, чи завантажений плагін jQuery?


221

Чи є спосіб перевірити, чи доступний певний плагін?

Уявіть, що ви розробляєте плагін, який залежить від завантаження іншого плагіна.

Наприклад, я хочу, щоб плагін jQuery Validation використовував бібліотеку dateJS, щоб перевірити, чи дана дата дійсна. Що було б найкращим способом виявити у плагіні jQuery Valdation, якщо дата JS була доступна?



Відповіді:


364

Взагалі кажучи, плагіни jQuery - це простори імен в області jQuery. Ви можете запустити просту перевірку, щоб перевірити, чи існує простір імен:

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

dateJs, однак, не є додатком jQuery. Він змінює / розширює об’єкт дати javascript і не додається як простір імен jQuery. Ви можете перевірити, чи існує потрібний вам метод, наприклад:

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

Але у вас можуть виникнути проблеми, коли API перекриває нативну дату API.


63
якщо (jQuery.fn.pluginName) {...} інший варіант
Nagyman

6
Можливо, трохи надмірності, але if ($.isFunction(jQuery.fn.pluginName)) { ... }також забезпечить, що це хоча б функція.
Нойо

У мене є функція, що завантажує скрипт, `LoadScript (розташування, namespcae, callBack)`, функція зворотного виклику викривляється через інтервал, означає, поки простір імен, тобто window.jQueryне буде встановлено, зворотний виклик не запуститься, він буде працювати нормально, але тепер імперінг до завантажуйте плагін aj query і щоб перевірити це, мені потрібно викликати функцію вибору jquery на кшталт jQuery().pluginName, але коли я передаю її параметр моєї функції, наприклад, LoadScript("jquery+plugin.js",jquery().plugin)jquery () доза ще не існує
Хасан Нісар Хан

97

Якщо ми говоримо про належний плагін jQuery (той, який розширює простір імен fn), то правильним способом виявити плагін буде:

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

Або тому, що кожен плагін майже гарантовано має деяке значення, яке прирівнюється до істинного, ви можете використовувати коротший

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

BTW, $ і jQuery взаємозамінні, як демонструє дивна обгортка навколо плагіна:

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

закриття

(function($) {
    //
})

супроводжується одразу викликом до цього закриття 'проходження' jQuery як параметра

(jQuery)

$ у закритті встановлюється рівним jQuery


2
Я зробив функціюfunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle

2
Перший приклад повинен бутиif(typeof $.fn.pluginname != 'undefined')
допи

1
@dops є правильним, і я відповідно відредагував відповідь, хоча для порівняння як типу, так і значення використовував заперечену потрійну, а не подвійну рівність.
pwdst

1
$і jQueryне завжди взаємозамінні, оскільки jQuery можна (наприклад, у WordPress) завантажувати в режимі безконфліктного режиму . Це змусило мене завжди використовувати готовий скорочений, не конфліктний документ: jQuery(function($) { // $ is safe in here.... });або, як ви зазначаєте, шаблон закриття: (function($) { // $ is safe in here.... })(jQuery);залежно від мого настрою / потреби. (BTW, схвалено, тому що я вважаю за краще чек, який ви рекомендуєте)
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)

Дякую. Ще один приклад - плагін Jquery Cookie
ymakux


1

Я настійно рекомендую зв’язати бібліотеку DateJS зі своїм плагіном і документувати факт, що ви це зробили. Ніщо не страшніше, ніж розшукувати залежності.

Однак з юридичних причин ви не завжди зможете все зібрати. Також ніколи не завадить бути обережними і перевіряти наявність плагіна, використовуючи відповідь Ерана Гальперіна .


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;
}

6
Практично спокусився переконатись у тому, щоб зловити те, що ви можете (і повинні) легко виявити
pwdst
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.