Nicht erfasster TypeError: Die Eigenschaft 'msie' von undefinierten jQuery-Tools kann nicht gelesen werden

189

Ich erhalte die folgende Fehlermeldung in der Chrome Dev Console:

Uncaught TypeError: Cannot read property 'msie' of undefined

Mein Verständnis ist, dass es daran liegt, dass es .browserin jQuery jetzt veraltet ist, ich jedoch die neueste Version der jQuery-Tools verwende und es immer noch den Fehler gibt. Ich habe die jsDatei eingecheckt und sie ist da.

Wie kann ich das umgehen, damit der Fehler nicht auftritt?

Colin747
quelle
1
Dieser Fehler ist nicht ausreichend. Aus welchem ​​Element versuchen Sie dies zu lesen?
Siddharth Gupta
Ich habe .browsermeinen Code überhaupt nicht verwendet . Es scheint es in der jQuery-Tools-Datei zu erkennen.
Colin747
6
Das browserObjekt ist nicht nur in 1.9 veraltet , es ist auch weg . Wenn jQuery Tools es noch verwendet, ist jQuery Tools fehlerhaft.
Pointy
1
@ Alexander, der den Fehler loszuwerden schien. Sie können eine Antwort geben, wenn Sie möchten.
Colin747
3
Die neuesten jQuery-Tools wurden nur mit jQuery 1.7 getestet. jQuery 1.9 ist nicht mit der neuesten Version von jQuery Tools kompatibel. so einfach ist das Dump jQuery Tools oder Downgrade von jQuery auf eine Version unter 1.9, die funktioniert. Erwarten Sie andernfalls nicht, dass jemand jQuery Tools aktualisiert. In den letzten Jahren gab es keinen Entwickler mehr.
Sparky

Antworten:

188

Die $.browserMethode wurde ab jQuery 1.9 entfernt.

jQuery.browser() removed

Die jQuery.browser()Methode ist seit jQuery 1.3 veraltet und wird in 1.9 entfernt. Bei Bedarf ist es als Teil des jQuery Migrate-Plugins verfügbar. Wir empfehlen die Feature-Erkennung mit einer Bibliothek wie Modernizr.

- Upgrade-Handbuch für jQuery Core 1.9 .

Wie im Upgrade-Handbuch angegeben, können Sie versuchen, das jQuery Migrate-Plugin zu verwenden, um diese Funktionalität wiederherzustellen und jQuery Tools arbeiten zu lassen.

Alexander
quelle
242

Sie können diese Lösung von AJ testen. Es ist ziemlich einfach, kopieren Sie einfach die folgenden Codezeilen und fügen Sie sie ein.

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;
    }
})();

Referenz :

JrBriones
quelle
4
Das funktioniert perfekt! Aber ich nehme an, dies sollte eher als Patch als als Lösung verwendet werden, oder?
Jobokai
Vielen Dank, dass Sie ein jquery-Plugin verwendet haben, das dies verwendet hat, und dies war eine einfache kurzfristige Lösung, bis eine echte Lösung verfügbar ist.
Joe Meyer
Vielen Dank. Dies hat Query Tools v1.2.7 behoben, da wir JQuery auf den neuesten Stand gebracht haben.
Bsentosa
1
WOW, wenn ich dir 10 Pluspunkte geben könnte, würde ich es sofort tun.
Iman Hejazi
9
Diese Antwort ist nicht mehr korrekt, da IE11 das MSIE-Token nicht in der userAgentZeichenfolge enthält.
Dave Methvin
45

Verwenden Sie das folgende Skript-Tag in Ihrer jsp / js-Datei:

<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>

das wird sicher funktionieren.

Manisha Srivastava
quelle
Stellen Sie sicher, dass Sie eine funktionierende Internetverbindung haben. Wenn Sie offline verwenden, laden Sie die js-Datei an Ihrem Ende herunter und verweisen Sie dann auf diese Datei.
Manisha Srivastava
Nun, ich kann sehen, dass es online gehostet wird ... trotzdem danke ich habe es mit jquery.noConflict () gelöst, da ich zwei Versionen von jquery hatte, die auf derselben Seite verwendet wurden.
Prerit Mohan
@ User5590: jederzeit :)
Manisha Srivastava
Sollte in der Produktion keine nicht minimierte Abfrage verwenden: Überprüfen Sie beispielsweise cdnjs.com . Verwenden Sie stattdessen HTTPS.
Takman
27

Ich benutze den folgenden Code nach js file include und es funktioniert jetzt.

<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>
Atik Khan
quelle
Dieser Link Link gibt mir Fehler, aber dieses kleine Stück Code schriebst du mir viel, dank Mann geholfen.
Saman
7

Hier ist der jQuery Tools-Fehler auf GitHub . Sie können einen der Patches ausprobieren.

edit - es sieht für mich nicht so aus, als würde jQuery Tools viel Unterstützung bekommen. Ich persönlich würde kein neues Projekt mit einer Abhängigkeit von dieser Bibliothek beginnen, wenn ich nicht bereit wäre, die Unterstützung selbst zu übernehmen.

Spitze
quelle
1
+1, jQuery Tools war in den letzten Jahren ein komplettes Durcheinander. Dass es nicht "viel Unterstützung" gibt, ist sehr genau und eine große Untertreibung. Ich denke, seit jQuery 1.3 gab es nur ein kleines Update und in den letzten Jahren auch keinen Entwickler.
Sparky
Hat jemand eine Empfehlung für eine Ersatzbibliothek? Etwas mit einem Scroller, Overlay und Range Input Slider? Ich vermeide jQuery Mobile, weil es vorgestylt ist. Ich habe es schon einmal gestylt und es ist ein Albtraum.
inorganik
5
Ich habe nur gut geschriebene Minimalbibliotheken für jede gewünschte Funktion gefunden. dh: Schieberegler für die Bereichseingabe : loopj.com/jquery-simple-slider , Scroller / Schieberegler: bxslider.com . Ich finde viel bessere Unterstützung und insgesamt weniger Platzbedarf,
wenn
4

Ich habe einfach hinzugefügt

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

nach jquery script, weil mir der IE nicht mehr wichtig ist.

userlond
quelle
3

Ersetzen Sie Ihre JS durch

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

Quelle Link

Bugfixer
quelle
Im Moment für jquery 1.7+ ist die neueste jquery-ui:<link rel="stylesheet" href="https://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>
Uhrmacher
0

Da ich nicht vorhabe, alte MS IE-Versionen überhaupt zu unterstützen, habe ich einfach alle Verweise auf browser.msiedurch ersetzt false. Keine schöne Lösung, ich weiß, aber es funktioniert für mich.

(Tatsächlich erschienen sie als !browser.msie, was in den Bedingungen weggelassen werden konnte.)

Lerin Sonberg
quelle
0

Verwenden Sie wie Schlag

$(function (a) {

. . . . Dann können Sie in Ihrer Funktion die msie-Eigenschaft wie verwenden

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

Viel Glück

HamidSadeghi
quelle
0

Verwenden Sie wie Schlag

Ich benutze diesen Befehl und löse

"Nicht erfasster TypeError: Eigenschaft 'msie' von undefined kann nicht gelesen werden" Fehler

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

Ich habe diesen Fehler bei der Verwendung von JQuery 1.10 und JQuery UI 1.8 erhalten. Ich konnte diesen Fehler beheben, indem ich auf die neueste JQuery UI 1.11.4 aktualisierte.

Schritte zum Aktualisieren der JQuery-Benutzeroberfläche in Visual Studio:

  • Navigieren Sie zu Projekt oder Lösung
  • Rechtsklick: "NuGet-Pakete verwalten"
  • Klicken Sie links auf die Registerkarte "Installierte Pakete"
  • Suchen Sie nach "JQuery UI (Combined Library)" und klicken Sie auf "Update"
  • Wenn gefunden, wählen Sie es aus und klicken Sie auf Aktualisieren
  • Wenn nicht gefunden, finden Sie es auf der Registerkarte "Online> nuget.org" auf der linken Seite und klicken Sie auf "Installieren". Wenn die alte Version der Jquery UI-Version noch vorhanden ist, kann sie aus dem Projekt gelöscht werden
LogicFirst
quelle
0

Wenn Sie jQuery zweimal definiert haben, kann dieser Fehler auftreten. Wenn Sie beispielsweise mit Primefaces arbeiten (es enthält bereits jQuery) und es an einer anderen Stelle definieren.

Carlos UCR
quelle