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?



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.


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


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
}

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)

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 .


1

Uruchom to w wybranej konsoli przeglądarki.

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

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


-1

Takie podejście powinno zadziałać.

var plugin_exists = true;

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

6
Prawie pokusie downvote do połowu, co można (i należy) łatwo wykryć
pwdst
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.