Fancybox zrywa z nowym jQuery v1.9.0.
Dotyczy to zarówno wersji Fancybox 1.3.4 i starszych - jak i wersji 2.1.3 i starszych.
Wyświetlane błędy to:
1.3.4:
Timestamp: 15/01/2013 10:03:28 AM
Error: TypeError: b.browser is undefined
Source File: ...fancybox/jquery.fancybox-1.3.4.pack.js
Line: 18
... inne błędy
Uncaught TypeError: Cannot read property 'msie' of undefined jquery.fancybox-1.3.4.pack.js:18
Uncaught TypeError: Object [object Object] has no method 'fancybox'
W wersji 2.1.3:
Timestamp: 15/01/2013 10:09:58 AM
Error: TypeError: $.browser is undefined
Source File: h.../fancybox2.1.3/jquery.fancybox.js
Line: 139
Jeśli używasz tego do wywoływania jQuery:
<script src="http://code.jquery.com/jquery-latest.js"></script>
... żadna z Twoich istniejących implementacji Fancybox nie powiedzie się !!
jquery-latest.js
w produkcji!Odpowiedzi:
Wygląda na to, że istnieje błąd w jQuery zgłoszony tutaj: http://bugs.jquery.com/ticket/13183, który łamie skrypt Fancybox.
Sprawdź również https://github.com/fancyapps/fancyBox/issues/485, aby uzyskać dalsze informacje.
Aby obejść ten problem , wycofaj się do jQuery v1.8.3, gdy błąd jQuery został naprawiony lub Fancybox jest załatany.
UPDATE (16 stycznia 2013): Fancybox v2.1.4 został wydany i teraz działa dobrze z jQuery v1.9.0.
W przypadku fancybox v1.3.4 - nadal musisz przywrócić jQuery v1.8.3 lub zastosować skrypt migracji, jak wskazuje odpowiedź @ Manu.UPDATE (17 stycznia 2013 r.): Obejście dla użytkowników Fancybox v1.3.4 :
Załatać plik js fancybox , aby pracować z jQuery v1.9.0, co następuje:
Znajdź wokół linii 29, gdzie jest napisane:
i zamień go na ( ZMIENIONO 19 marca 2013: dokładniejszy filtr):
UPDATE (19 marca 2013): zastąpić także
$.browser.msie
przeznavigator.userAgent.match(/msie [6]/i)
około linii 615 (i / lub wymienić wszystkie$.browser.msie
instancje, jeśli w ogóle), dzięki joofow ... to jest to!Lub pobierz już poprawioną wersję TUTAJ (AKTUALIZACJA 19 marca 2013 ... dzięki, wróżka za wskazanie dodatkowego nawiasu zamykającego)
UWAGA : jest to nieoficjalna łatka i nie jest obsługiwana przez autora Fancybox, jednak działa tak, jak jest. Możesz go używać na własne ryzyko;)
Opcjonalnie możesz raczej cofnąć się do jQuery v1.8.3 lub zastosować skrypt migracji, jak wskazuje odpowiedź @ Manu.
źródło
/msie [6]/i
? - Klasa znaku[6]
jest dokładnie równoważna znakowi6
, tj. Bez nawiasów. To nie wzbudza zbytniego zaufania do kodu…: /[6-8]
iw tym przypadku poszło tak[6]
, jak na końcu jest po prostu konwencja składni. W każdym razie, jeśli są one „dokładnie równoważne”, to jak wpływa to na zaufanie do kodu?!?! Gdyby wynik z nawiasami lub bez był inny i stwarzało to miejsce na nieporozumienia, zgodziłbym się z Tobą, w przeciwnym razie nie widzę Twojego komentarza „… nie budzi zaufania…” bardzo konstruktywnego. Wolałbym zachęcić Cię do zamieszczenia własnej odpowiedzi „budzącej zaufanie”.Cześć, wynika to z nowej wersji jQuery => 1.9.0
możesz sprawdzić aktualizację: http://blog.jquery.com/2013/01/15/jquery-1-9-final-jquery-2-0-beta-migrate-final-released/
jQuery.Browser jest przestarzała. możesz zachować najnowszą wersję, dodając skrypt migracji: http://code.jquery.com/jquery-migrate-1.0.0.js
zastąpić :
przez :
na twojej stronie i działa.
źródło
Zdarzenia globalne również są przestarzałe.
Oto łatka, która rozwiązuje problemy z przeglądarką i zdarzeniami:
źródło
Na wypadek, gdyby ktoś nadal musiał obsługiwać starszą wersję Fancybox z jQuery 3.0+, oto kilka innych zmian, które musisz wprowadzić:
.unbind () jest przestarzały
Zastąpić wszystkie wystąpienia
.unbind
z.off
.removeAttribute () nie jest funkcją
Zmień wiersze 580-581, aby
.removeAttr()
zamiast tego używać jQuery :Stary kod:
Nowy kod:
To w połączeniu z inną wspomnianą powyżej poprawką rozwiązało moje problemy ze zgodnością.
źródło