Projekt, nad którym pracuję, wymaga użycia jQuery na stronach internetowych klientów. Klienci wstawią fragment kodu, który dostarczymy, który zawiera kilka <script>
elementów, które budują widget w <script>
utworzonym <iframe>
. Jeśli nie korzystają już z najnowszej wersji jQuery, obejmie to również (najprawdopodobniej) <script>
wersję jQuery dla Google.
Problem polega na tym, że niektórzy klienci mogą już mieć starszą wersję jQuery. Chociaż może to działać, jeśli jest to co najmniej całkiem nowa wersja, nasz kod opiera się na niektórych niedawno wprowadzonych funkcjach w bibliotece jQuery, więc na pewno będą przypadki, gdy wersja jQuery klienta jest po prostu za stara. Nie możemy wymagać od nich aktualizacji do najnowszej wersji jQuery.
Czy istnieje sposób załadowania nowszej wersji jQuery do użytku wyłącznie w kontekście naszego kodu, który nie będzie zakłócał ani nie wpływał na żaden kod na stronie klienta? Idealnie byłoby, gdybyśmy mogli sprawdzić obecność jQuery, wykryć wersję, a jeśli jest za stara, to w jakiś sposób załaduj najnowszą wersję, aby użyć jej w naszym kodzie.
Wpadłem na pomysł załadowania jQuery w <iframe>
domenie klienta, która obejmuje także naszą <script>
, co wydaje się być wykonalne, ale mam nadzieję, że istnieje bardziej elegancki sposób (nie wspominając o wydajności i złożoności kar dodatkowe <iframe>
s).
źródło
Odpowiedzi:
Tak, jest to wykonalne dzięki trybowi noconflict w jQuery. http://blog.nemikor.com/2009/10/03/using-multiple-versions-of-jquery/
Następnie zamiast tego
$('#selector').function();
zrobiłbyśjQuery_1_3_2('#selector').function();
lubjQuery_1_1_3('#selector').function();
.źródło
(function($) { /*your code here*/ }(jquery_x_x_x));
Po przyjrzeniu się temu i wypróbowaniu okazało się, że tak naprawdę nie pozwala na uruchomienie więcej niż jednego wystąpienia jquery na raz. Po przeszukaniu okazało się, że to załatwiło sprawę i było o wiele mniej kodu.
Zatem dodanie „j” po „$” było wszystkim, co musiałem zrobić.
źródło
(function($){ })($j)
Zaczerpnięte z http://forum.jquery.com/topic/multiple-versions-of-jquery-on-the-same-page :
$
ijQuery
należy do wersji X.$
ijQuery
należysz do wersji Y, plus_$
i_jQuery
należą do versionX.my_jQuery = jQuery.noConflict(true);
- teraz$
ijQuery
należą do wersji X,_$
i_jQuery
prawdopodobnie są zerowe, imy_jQuery
jest w wersji Y.źródło
Na twojej stronie możesz mieć tyle różnych wersji jQuery, ile chcesz.
Użyj
jQuery.noConflict()
:DEMO | Źródło
źródło
Możliwe jest załadowanie drugiej wersji jQuery, użyj go, a następnie przywróć do oryginału lub zachowaj drugą wersję, jeśli wcześniej nie było załadowane jQuery. Oto przykład:
źródło
Chciałbym powiedzieć, że zawsze musisz używać najnowszych lub najnowszych stabilnych wersji jQuery. Jeśli jednak potrzebujesz trochę pracy z innymi wersjami, możesz dodać tę wersję i zmienić jej nazwę na
$
inną. Na przykładZajrzyj tutaj, jeśli napiszesz coś za pomocą,
$
a otrzymasz najnowszą wersję. Ale jeśli chcesz zrobić coś ze starym, po prostu użyj$oldjQuery
zamiast$
.Oto przykład
Próbny
źródło
Oczywiście, że tak. Ten link zawiera szczegółowe informacje na temat tego, jak to osiągnąć: https://api.jquery.com/jquery.noconflict/ .
źródło