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?
jquery
jquery-plugins
Vitor Silva
źródło
źródło
Odpowiedzi:
Ogólnie rzecz biorąc, wtyczki jQuery to przestrzenie nazw w zakresie jQuery. Możesz uruchomić proste sprawdzenie, czy przestrzeń nazw istnieje:
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:
Ale mogą wystąpić problemy, gdy interfejs API nakłada się na natywny interfejs API Date.
źródło
if ($.isFunction(jQuery.fn.pluginName)) { ... }
zapewni również, że przynajmniej funkcja.window.jQuery
nie 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 jakjQuery().pluginName
, ale kiedy ją przekażę, mój parametr funkcji jakLoadScript("jquery+plugin.js",jquery().plugin)
jquery () dawka jeszcze nie istniejeJeś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:
Lub ponieważ każda wtyczka ma pewną wartość, która odpowiada prawdzie, możesz użyć krótszej
BTW, $ i jQuery są wymienne, ponieważ dziwnie wyglądające opakowanie wokół wtyczki pokazuje:
zamknięcie
po nim następuje natychmiastowe wywołanie do tego „przekazującego” jQuery jako parametru
$ w zamknięciu jest równe jQuery
źródło
function isPluginLoaded(plugin) { return !!$.fn[plugin] }
if(typeof $.fn.pluginname != 'undefined')
$
ijQuery
nie 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ę)Aby wykryć wtyczki jQuery, znalazłem dokładniejsze użycie nawiasów:
źródło
w przypadku wtyczek, które nie używają przestrzeni nazw fn (na przykład pnotify), działa to:
To nie działa:
źródło
jQuery ma metodę sprawdzania, czy coś jest funkcją
Dokumentacja interfejsu API: https://api.jquery.com/jQuery.isFunction/
źródło
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 .
źródło
Uruchom to w wybranej konsoli przeglądarki.
if(jQuery().pluginName){console.log('bonjour');}
Jeśli wtyczka istnieje, wydrukuje „bonjour” jako odpowiedź na konsoli.
źródło
Takie podejście powinno zadziałać.
źródło