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

221

Czy jest jakiś sposób, aby sprawdzić, czy konkretna 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 korzystała z biblioteki dateJS w celu sprawdzenia, czy podana data jest poprawna. Jaki byłby najlepszy sposób na wykrycie wtyczki jQuery Valdation, jeśli dataJS była dostępna?

Vitor Silva
źródło

Odpowiedzi:

364

Ogólnie rzecz biorąc, wtyczki jQuery to przestrzenie 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. Zmienia / rozszerza obiekt daty javascript i nie jest dodawany jako przestrzeń nazw jQuery. Możesz sprawdzić, czy istnieje metoda, której potrzebujesz, na przykład:

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

Ale mogą wystąpić problemy, gdy interfejs API nakłada się na natywny interfejs API Date.

Eran Galperin
źródło
63
if (jQuery.fn.pluginName) {...} to kolejna opcja
Nagyman
6
Może trochę przesada, ale if ($.isFunction(jQuery.fn.pluginName)) { ... }zapewni również, że przynajmniej funkcja.
Noyo
Mam funkcję, która ładuje skrypt, `LoadScript (lokalizacja, nazwa pliku, callBack)`, funkcja wywołania zwrotnego jest wypaczona w odstępie czasu, co oznacza, że ​​dopóki przestrzeń nazw tj. window.jQuerynie jest ustawiona, wywołanie zwrotne nie uruchomi się, działa dobrze, ale teraz improwizuje wczytaj wtyczkę zapytania aj i sprawdź, czy muszę wywołać funkcję wyboru jquery jak jQuery().pluginName, ale kiedy ją przekażę, mój parametr funkcji jak LoadScript("jquery+plugin.js",jquery().plugin)jquery () dawka jeszcze nie istnieje
Hassan Nisar Khan
97

Jeśli mówimy o właściwej wtyczce jQuery (takiej, która rozszerza przestrzeń nazw fn), to właściwym sposobem na wykrycie wtyczki byłoby:

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

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

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

BTW, $ i jQuery są wymienne, ponieważ dziwnie wyglądające opakowanie wokół wtyczki pokazuje:

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

zamknięcie

(function($) {
    //
})

po nim następuje natychmiastowe wywołanie do tego „przekazującego” jQuery jako parametru

(jQuery)

$ w zamknięciu jest równe jQuery

rmirabelle
źródło
2
Zrobiłem funkcjęfunction isPluginLoaded(plugin) { return !!$.fn[plugin] }
styfle
2
Pierwszym przykładem powinno byćif(typeof $.fn.pluginname != 'undefined')
dops
1
@dops jest poprawny i odpowiednio zredagowałem odpowiedź, chociaż użyłem zanegowanej równości potrójnej zamiast podwójnej równości do porównania zarówno typu, jak i wartości.
pwdst
1
$i jQuerynie zawsze są wymienne, ponieważ jQuery może być (np. w WordPressie) ładowany w trybie bez konfliktu . To sprawiło, że zawsze używam gotowego skróconego dokumentu, który nie jest bezpieczny dla konfliktów: jQuery(function($) { // $ is safe in here.... });lub, jak zauważyłeś, wzór zamknięcia: (function($) { // $ is safe in here.... })(jQuery);w zależności od mojego nastroju / potrzeby. (BTW, pozytywnie oceniany, ponieważ zalecany przeze mnie czek jest tym, który wolę)
random_user_name
11

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

if(jQuery().pluginName) {
    //run plugin dependent code
}
Suso Guez
źródło
8

w przypadku 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)
trante
źródło
Dzięki. Kolejny przykład - wtyczka Jquery Cookie
ymakux
1

Zdecydowanie polecam spakowanie biblioteki DateJS ze swoją wtyczką i udokumentowanie, że to zrobiłeś. Nie ma nic bardziej frustrującego niż szukanie zależności.

To powiedziawszy, ze względów prawnych, nie zawsze możesz być w stanie spakować wszystko. Nigdy nie boli być ostrożnym i sprawdzać istnienie wtyczki, korzystając z odpowiedzi Erana Galperina .

Soviut
źródło
1

Uruchom to w wybranej konsoli przeglądarki.

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

Jeśli wtyczka istnieje, wydrukuje „bonjour” jako odpowiedź na konsoli.

Joshua Pekera
źródło
-1

Takie podejście powinno zadziałać.

var plugin_exists = true;

try {
  // some code that requires that plugin here
} catch(err) {
  plugin_exists = false;
}
ceejayoz
źródło
6
Prawie pokusie downvote do połowu, co można (i należy) łatwo wykryć
pwdst