Jak mogę sprawdzić, czy wtyczka jQuery jest załadowana?

Czy Jest jakiś sposób, aby sprawdzić, czy dana wtyczka jest dostępna?

Wyobraź sobie, że tworzysz wtyczkę, która zależy od załadowania innej wtyczki.

Na przykład chcę, aby wtyczka jQuery Validation używała biblioteki dateJS, aby sprawdzić, czy dana Data jest ważna. Jaki byłby najlepszy sposób na wykrycie wtyczki jQuery, gdyby dateJS był dostępny?

Author: meagar, 2008-12-30

8 answers

Ogólnie rzecz biorąc, wtyczki jQuery są przestrzeniami nazw w zakresie jQuery. Możesz uruchomić proste sprawdzenie, czy przestrzeń nazw istnieje:

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

DateJs nie jest jednak wtyczką jQuery. Modyfikuje / rozszerza obiekt javascript date i nie jest dodawany jako przestrzeń nazw jQuery. Możesz sprawdzić, czy potrzebna metoda istnieje, na przykład:

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

Ale możesz napotkać problemy, w których API pokrywa się z natywnym API daty.

 331
Author: Eran Galperin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-21 23:43:26

Jeśli mówimy o właściwej wtyczce jQuery (która rozszerza przestrzeń nazw fn), to właściwym sposobem wykrycia wtyczki będzie:

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

Lub ponieważ każda wtyczka ma pewną wartość, która odpowiada true, możesz użyć krótszego

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

BTW, $ i jQuery są wymienne, jak pokazuje dziwnie wyglądający wrapper wokół wtyczki:

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

Zamknięcie

(function($) {
    //
})

Następuje natychmiast po wezwaniu do zamknięcia "przechodzenia" jQuery jako parametr

(jQuery)

$ w zamknięciu jest równe jQuery

 87
Author: rmirabelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-10 15:31:02

Aby wykryć wtyczki jQuery znalazłem dokładniejsze użycie nawiasów:

if(jQuery().pluginName) {
    //run plugin dependent code
}
 11
Author: Suso Guez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-23 10:47:08

Dla wtyczek, które nie używają przestrzeni nazw fn (na przykład pnotify), działa to:

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

To nie działa:

if($.fn.pluginname)
 9
Author: trante,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-04 18:49:10

Uruchom to w wybranej konsoli przeglądarki.

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

Jeśli wtyczka istnieje, wydrukuje "bonjour" jako odpowiedź w konsoli.

 2
Author: Joshua Pekera,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-13 18:42:33

Takie podejście powinno zadziałać.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
 1
Author: ceejayoz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-30 17:35:49

Zdecydowanie polecam, że pakiet biblioteki DateJS z wtyczki i udokumentować fakt, że to zrobiłeś. Nic nie jest bardziej frustrujące niż polowanie na zależności.

To powiedziawszy, ze względów prawnych, nie zawsze możesz być w stanie spakować wszystko. Nigdy też nie zaszkodzi być ostrożnym i sprawdzić istnienie wtyczki za pomocą Eran Galperin ' s answer .

 1
Author: Soviut,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:37

JQuery ma metodę sprawdzania czy coś jest funkcją

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

API reference: https://api.jquery.com/jQuery.isFunction/

 1
Author: x-freestyler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 12:30:41