Uncaught TypeError: Nie można odczytać właściwości „msie” niezdefiniowanych narzędzi jQuery


190

W konsoli programistów Chrome pojawia się następujący błąd:

Uncaught TypeError: Cannot read property 'msie' of undefined

Rozumiem, że dzieje się tak, ponieważ .browserjest on przestarzały w jQuery, ale używam najnowszej wersji narzędzi jQuery i nadal daje błąd, sprawdziłem jsplik i już tam jest.

Jak obejść ten problem, aby nie wyświetlał błędu?


1
ten błąd jest niewystarczający. Z jakiego elementu próbujesz to odczytać?
Siddharth Gupta

W ogóle nie użyłem .browsertego kodu. Wygląda na to, że wykrywa go w pliku narzędzi jQuery.
Colin747,

6
browserObiekt jest nie tylko przestarzałe w 1.9, to poszedł . Jeśli jQuery Tools nadal go używa, to jQuery Tools jest zepsuty.
Pointy

1
@Alexander, który wydawał się pozbyć błędu. Możesz podać odpowiedź, jeśli chcesz.
Colin747,

3
Najnowsze narzędzia jQuery zostały przetestowane tylko z jQuery 1.7. jQuery 1.9 nie jest kompatybilny z najnowszą wersją jQuery Tools; to takie proste. Zrzuć narzędzia jQuery lub obniż jQuery na starszą wersję, która działa. W przeciwnym razie nie oczekuj, że ktokolwiek zaktualizuje narzędzia jQuery, od kilku lat nie ma programisty.
Sparky,

Odpowiedzi:


189

$.browserSposób został usunięty jQuery 1.9.

jQuery.browser() removed

jQuery.browser()Metoda nie jest zalecana, ponieważ jQuery 1.3 i usunięto 1,9. W razie potrzeby jest dostępny jako część wtyczki jQuery Migrate. Zalecamy korzystanie z funkcji wykrywania funkcji w bibliotece takiej jak Modernizr.

- Przewodnik aktualizacji jQuery Core 1.9 .

Jak stwierdzono w Przewodniku aktualizacji, możesz spróbować użyć wtyczki jQuery Migrate, aby przywrócić tę funkcjonalność i pozwolić narzędziom jQuery działać.


242

Możesz sprawdzić to rozwiązanie przez AJ. To dość proste, wystarczy skopiować i wkleić następujące wiersze kodu.

jQuery.browser = {};
(function () {
    jQuery.browser.msie = false;
    jQuery.browser.version = 0;
    if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
        jQuery.browser.msie = true;
        jQuery.browser.version = RegExp.$1;
    }
})();

Odniesienie :


4
To działa idealnie! Ale uważam, że powinno to być używane jako łatka, a nie rozwiązanie, prawda?
Jobokai,

Dzięki za pomocą wtyczki jquery, która tego używała, i było to łatwe rozwiązanie krótkoterminowe, dopóki nie pojawi się prawdziwa poprawka.
Joe Meyer

Dzięki. To naprawiło Query Tools v1.2.7, ponieważ zaktualizowaliśmy JQuery do najnowszej wersji.
bsentosa

1
WOW, gdybym mógł dać ci 10 plusów, zrobię to teraz.
Iman Hejazi

9
Ta odpowiedź nie jest już poprawna, ponieważ IE11 nie ma tokena MSIE w userAgentciągu.
Dave Methvin

47

Użyj następującego znacznika skryptu w pliku jsp / js:

<script src="http://code.jquery.com/jquery-1.9.0.js"></script>
<script src="http://code.jquery.com/jquery-migrate-1.2.1.js"></script>

to na pewno zadziała.


upewnij się, że masz działające połączenie z Internetem. Jeśli korzystasz z trybu offline, pobierz plik js na swoim końcu, a następnie zapoznaj się z tym plikiem.
Manisha Srivastava

Cóż, widzę, że jest on hostowany online ... w każdym razie dzięki rozwiązałem go za pomocą jquery.noConflict (), ponieważ miałem dwie wersje jquery używane na tej samej stronie.
Prerit Mohan

@ User5590: kiedykolwiek :)
Manisha Srivastava

Nie należy używać nie zminimalizowanej jquery w produkcji: sprawdź na przykład cdnjs.com . I zamiast tego użyj HTTPS.
Takman

27

Używam poniższego kodu po dołączeniu pliku js i teraz działa.

<script src="js/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    jQuery.browser = {};
    (function () {
        jQuery.browser.msie = false;
        jQuery.browser.version = 0;
        if (navigator.userAgent.match(/MSIE ([0-9]+)\./)) {
            jQuery.browser.msie = true;
            jQuery.browser.version = RegExp.$1;
        }
    })();
</script>

Ten link ogniwo daje mi błąd, ale ten mały kawałek kodu napisałeś bardzo mi pomogło, dzięki człowieka.
Saman

7

Oto błąd narzędzi jQuery na GitHub . Możesz wypróbować jedną z łat.

edycja - nie wygląda mi to tak, jakby narzędzia jQuery otrzymywały duże wsparcie. Osobiście nie chciałbym rozpocząć nowego projektu w zależności od tej biblioteki, chyba że sam byłbym przygotowany na przejęcie wsparcia.


1
+1, jQuery Tools było kompletnym bałaganem od kilku lat. To, że nie „dostaje się dużego wsparcia”, jest bardzo dokładne i ogromne niedopowiedzenie. Myślę, że była tylko jedna drobna aktualizacja od jQuery 1.3 i nie ma programisty przez ostatnie kilka lat.
Sparky,

Zgadzam się, czy ktoś ma zalecenie dotyczące biblioteki zastępczej? Coś z przewijakiem, nakładką i suwakiem wprowadzania zakresu? Unikam jQuery mobile, ponieważ jest wstępnie stylizowany. Już go stylizowałem i to koszmar.
inorganik

5
Przeszedłem do znajdowania dobrze napisanych minimalnych bibliotek dla każdej funkcji, której chcę. tzn .: suwak wprowadzania zakresu: loopj.com/jquery-simple-slider , scroller / slider: bxslider.com . Znajduję znacznie lepsze wsparcie i ogólnie mniejszą powierzchnię, znajdując takie biblioteki
jfeust

4

Po prostu dodałem

jQuery.browser = {
    msie: false,
    version: 0
};

po skrypcie jquery, bo już mnie nie obchodzi IE.


3

Zamień JS na

<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

Link źródłowy


W tej chwili dla jquery 1.7+ najnowsza jquery-ui to:<link rel="stylesheet" href="https://stackoverflow.com//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
Zegarmistrz

0

Jak ja nie planuje obsługiwać starsze wersje MS IE w ogóle, ja po prostu wymienić wszystkie odwołania do browser.msiez false. Wiem, że to niezbyt dobre rozwiązanie, ale działa dla mnie.

(W rzeczywistości wyglądały jak !browser.msie, co można pominąć w warunkach).


0

Użyj jak ciosu

$(function (a) {

. . . . . następnie w swojej funkcji możesz użyć właściwości msie jak

if (a.browser.msie) 
{
}
else 
{
   $(settings.current).after(Uploadelement);
}

powodzenia


0

Użyj jak ciosu

używam tego polecenia i rozwiązuję

Błąd „Uncaught TypeError: Nie można odczytać właściwości„ msie ”niezdefiniowanego” Błąd

if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
    return;
}

0

Wystąpił ten błąd podczas korzystania z JQuery 1.10 i JQuery UI 1.8. Byłem w stanie rozwiązać ten błąd, aktualizując do najnowszej wersji JQuery UI 1.11.4.

Kroki, aby zaktualizować interfejs użytkownika JQuery z Visual Studio:

  • Przejdź do projektu lub rozwiązania
  • Kliknij prawym przyciskiem myszy: „Zarządzaj pakietami NuGet”
  • Po lewej stronie kliknij kartę „Zainstalowane pakiety”
  • Poszukaj „JQuery UI (biblioteka połączona)” i kliknij Aktualizuj
  • Jeśli znaleziono, wybierz go i kliknij Aktualizuj
  • Jeśli nie zostanie znaleziony, znajdź go w zakładce „Online> nuget.org” po lewej stronie i kliknij zainstaluj. Jeśli stara wersja interfejsu użytkownika Jquery nadal istnieje, można ją usunąć z projektu

0

Jeśli masz jQuery zdefiniowane dwukrotnie, możesz otrzymać ten błąd. Na przykład, jeśli pracujesz z Primefaces (już zawiera jQuery) i definiujesz go w innym miejscu.

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.