jQuery-Problem in Internet Explorer 8

78

Ich versuche, meine jQuery-Funktionen auf IE8 zum Laufen zu bringen. Ich lade die Bibliothek von den Servern von Google ( http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js ).

Das $(function(){})wird nie genannt. Stattdessen erhalte ich eine Fehlermeldung Object expected. Ich öffnete den Entwickler und lief typeof $in der Konsole, und es kam als undefined.

Ich habe versucht, auf andere Websites zu gehen, von denen ich weiß, dass sie jQuery (jquery.com) verwenden, und diese funktionieren alle. Gibt es etwas, das mir hier möglicherweise fehlt?

Shashank Agrawal
quelle
7
Ohne etwas von Ihrer Seite zu sehen, ist dies fast unmöglich zu diagnostizieren. Können Sie feststellen, ob die jQuery-Bibliothek geladen und ausgeführt wird, bevor Ihr Code ausgeführt wird?
ijw
Es scheint, dass das Problem darin besteht, dass jQuery tatsächlich geladen wird. Ich habe 3 Haltepunkte in der jQuery-Datei festgelegt, und alle wurden als ungültig eingestuft, da dieser Zeile kein ausführbarer Code zugeordnet ist.
Versuchen Sie, den Modus in IE8 zu ändern, um festzustellen, ob der IE7-Modus oder der IE8-Kompatibilitätsmodus funktioniert. Sie können dies über die Entwicklertools tun.
Jab
Ich hatte ähnliche Probleme beim Versuch, jQuery aus einem Skript zu laden (indem ich dem Header ein Skript-Tag hinzufügte) und es im selben Skript aufzurufen. Es sah nach einem Timing-Problem aus, bei dem jQuery nicht rechtzeitig geladen wurde. Ich habe es gelöst, indem ich ein statisches Skript-Tag in den HTML-Code eingefügt habe.
Tgr
Ich habe das gleiche Problem beim Laden von jQuery von Microsofts CDN - meine Lösung funktioniert in Chrome, aber nicht in IE8.
Marek Grzenkowicz

Antworten:

42

Schreiben Sie "var" vor Variablen, wenn Sie sie definieren. IE8 stirbt, wenn es kein "var" gibt.

asd
quelle
Ohne "var" Deklarationen funktionieren in IE7 und IE9. Es ist schwer zu verstehen, wie könnte MS einen solchen Fehler übersehen?
Neo
Danke Jungs für die Antwort ... Ihr habt mir heute den Kopf gerettet :)
Ravi
3
Entschuldigung, aber das stimmt nicht. Wir verwenden var, um eine Variable mit lokalem Gültigkeitsbereich zu definieren. Wenn Sie eine Variable ohne definieren var, wird tatsächlich eine Eigenschaft mit globalem Gültigkeitsbereich erstellt, dh als Eigenschaft des Fensterobjekts. Siehe diese Frage für weitere Informationen: stackoverflow.com/questions/1470488/…
James McCormack
Du hast meinen Tag gerettet. Vielen Dank! Dies löste tatsächlich mein Problem mit IE10. Jetzt funktioniert meine mobile jQuery-Website in allen
gängigen
39

Korrektur:

Überprüfen Sie, ob Ihr Skript-Include-Tag verwendet wird

type="application/javascript" src="/path/to/jquery" 

ändern

type="text/javascript" src="/path/to/jquery" 
Richard
quelle
Dies ist die Lösung auch für mich
Blake Niemyjski
38

Ich hatte ein ähnliches Problem. Die Dinge funktionierten in IE6, Firefox und IE8, die im IE7-Kompatibilitätsmodus ausgeführt wurden. aber nicht im "normalen" IE8. Meine Lösung bestand darin, diesen Code in den Header einzufügen

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> 

Ich bin mir nicht sicher, warum jquery in IE8 nicht funktioniert.

JeffryHouser
quelle
19
das ist schrecklich! es löst das Problem nicht; es hackt nur herum und es wird wahrscheinlich eine ganze Menge anderer Probleme verursachen. (IE7-Kompatibilitätsmodus ist eigentlich nicht ganz der gleiche wie IE7, es gibt eigene Fehler, Macken und Störungen, die weder im normalen IE7 noch im IE8 auftreten)
Spudley
33
Wenn Sie eine bessere Lösung haben, teilen Sie diese bitte mit. Viele Ansätze, um Dinge im IE zum Laufen zu bringen, sind Hacks.
JeffryHouser
8
Wenn es sich um einen Hack handelt, wird dieser von Microsoft empfohlen. msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx
eric.christensen
11
Da jemand dies gerade herabgestimmt hat; Bitte teilen Sie uns mit, warum und markieren Sie Ihren bevorzugten Ansatz.
JeffryHouser
7
Ich hatte dieses Problem und löste es mit Richards obiger Lösung. Ich habe alle meine <script type = "application / javascript" ... in <script type = "text / javascript" geändert, einschließlich meines jquery-Verweises auf die Google-CDN, und IE8 hat funktioniert. Ich musste nicht die ganze Seite in den Kompatibilitätsmodus versetzen, um dies zu tun.
Vineel Shah
12

Die Lösung besteht darin, auf die neueste Version von jQuery zu aktualisieren. Ich hatte genau das gleiche Problem und habe auf 1.4.2 aktualisiert und alles funktioniert wieder gut in IE8.

Scheint völlig abwärtskompatibel zu sein mit all den jQuery 1.3.2-Sachen, die ich auch gemacht habe, also keine Beschwerden hier!

Peter Burlingham
quelle
3
Ich habe dieses Problem mit 1.8 für was auch immer das bedeutet.
Josh
10

Ich hatte dieses Problem und versuchte die hier genannten Lösungen ohne Erfolg.

Schließlich stellte ich fest, dass ich eine Verknüpfung zur Google CDN-Version des Skripts herstellte, http URLwährend die Seite, in die das Skript eingebettet war, eine war https page.

Dies führte dazu, dass der IE jquery nicht lud (er fordert den Benutzer auf, nur sichere Inhalte zu laden). Das Ändern der Google CDN-URL zur Verwendung des https-Schemas hat das Problem für mich behoben.

Sheltond
quelle
Ich weiß , es ist eine alte Post, aber Sie können einen Blick auf haben wollen dies - es hat einen Abschnitt auf dem Weg google jetzt empfiehlt Sie seine CDN verwenden (was dieses Problems entledigt)
stef
8

Einige Leute, die über diesen Beitrag stolpern, bekommen möglicherweise dieses Problem mit jquery und IE8, weil sie> = jQuery v2 verwenden. Verwenden Sie diesen Code:

<!--[if lt IE 9]>
    <script src="jquery-1.9.0.js"></script>
<![endif]-->
<!--[if gte IE 9]><!-->
    <script src="jquery-2.0.0.js"></script>
<!--<![endif]-->
stuartdotnet
quelle
6

jQuery wird nicht geladen, dies ist wahrscheinlich nicht spezifisch für IE8. Überprüfen Sie den Pfad in Ihrem jQuery-Include. Erklärung. Oder noch besser, verwenden Sie Folgendes für das CDN:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">
</script>
cgp
quelle
3
Alles funktioniert in Firefox, Safari und Chrom. Ich kann feststellen, dass die Bibliothek heruntergeladen und nur nicht ausgeführt wird. Ich habe einen Haltepunkt in der Zeile in der jquery-Datei festgelegt, und es wurde festgestellt, dass der Zeile kein ausführbarer Code zugeordnet ist.
5

Ich habe eine Vorlage repariert, die von jemand anderem erstellt wurde, der vergessen hat, den Doctype einzuschließen.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Wenn Sie nicht deklarieren, dass der doctype IE8 im Quirks-Modus seltsame Dinge tut.

Hone Watson
quelle
Ich habe jeden der oben genannten Vorschläge ausprobiert ... das Ändern des Doctype (von HTML5s "<! DOCTYPE html>" hat es endlich zum Laufen gebracht.) In Dev Tools zeigt es, dass sich die Klasse des Elements tatsächlich ändert, aber ich vermute, dass die Rendering-Engine von IE8 dies nicht tut. t Aktualisierung bei Änderungen am DOM für nicht erkannte Doctypes)
Stephen M. Harris
4

Der Fehler Object expectedwird ausgelöst, weil Jquery nicht geladen ist. Dies geschieht aufgrund der Browsersicherheit (normalerweise IE), mit der Sie keinen externen Javascript-Quellcode ausführen können. Sie können dieses Problem beheben, indem Sie:

  • 1: Ändern der Browsersicherheitsstufe, um die Ausführung von externem Javascript-Code zu ermöglichen. Sie können feststellen , wie das hier zu tun

ODER

  • 2: Kopieren Sie den jquery-Quellcode in Ihre Webseite, damit er nicht als externes Skript betrachtet wird.

Ich bevorzuge die erste Lösung.

zelmarou
quelle
4

Das Onload-Ereignis funktioniert nicht immer in IE7 / 8 in<head> ... </head>

Sie können dies erzwingen, indem Sie am Ende Ihrer Seite vor dem Tag ein Onload-Skript hinzufügen (siehe unten).

  <script>
    window.onload();
  </script>
</body>
Andy Piddock
quelle
2

Vielleicht fügst du zwei Skripte ein, es sollte funktionieren.

<script src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE8.js"></script>  
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js">/script> 
Vadim Sluzky
quelle
2

Dies hat mein Problem in IE8 behoben:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>

Unter localhost musste ich https: // in http: // ändern

Wenn ich versuche, zum sicheren Link zu navigieren, kann der Internet Explorer die webseitenfreundliche Warnung nicht anzeigen .

Versuchen Sie immer, Ihre Textskripte zuerst in einen Browser zu laden, wenn es Probleme gibt!

Lenny
quelle
2

Ich hatte die gleichen Probleme.

Ich habe es gelöst und überprüft, ob IE8 nicht richtig konfiguriert wurde, um die SRC-URL zu erreichen.

Ich habe das geändert, es funktioniert richtig.

Tom van Enckevort
quelle
1

Ich hatte das gleiche Problem. Die Lösung bestand darin, den Link zur JQuery-Datei als vertrauenswürdige Site im IE hinzuzufügen.

Carlos Blanco
quelle
1

Ich denke, dass Sie das gleiche Problem haben wie ich:

Message: Permission denied
Line: 13
Char: 27021
Code: 0
URI: http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.3.2.min.js

Wegen domänenübergreifender Referenz. Versuchen Sie, jquery.js in derselben Domain zu hosten.

Vanja
quelle
0

Kurz gesagt, es liegt an der IE8-Parsing-Engine.

Ratet mal, warum Microsoft Probleme hat, auch mit den neuen HTML5-Tags (wie "Abschnitt") zu arbeiten? Dies liegt daran, dass MS beschlossen hat, nicht wie der Rest der Welt reguläres XML-Parsing zu verwenden. Ja, das ist richtig - sie haben eine Menge Propaganda über XML gemacht, aber am Ende greifen sie auf eine "dumme" Parsing-Engine zurück, die nach "bekannten Tags" sucht und Dinge durcheinander bringt, wenn etwas Neues auftaucht.

Gleiches gilt für IE8 und das jquery-Problem mit "load", "get" und "post". Wieder entschied sich Microsoft, mit Version 8 "ihren eigenen Weg zu gehen". In der Hoffnung, dass (d) dies in IE9 gelöst wird, besteht die einzige aktuelle Option darin, auf das Parsen mit IE7 zurückzugreifen <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />.

Na ja ... was für eine Überraschung, dass Microsoft uns dazu gebracht hat, wieder etwas in Foren zu posten. ;)

E-Sushi
quelle
0

In meinem Fall bestand die Lösung darin, Sonderzeichen aus der URL zu entfernen, auf die Sie zugreifen möchten. Ich hatte eine Tilde (~) und ein Prozentzeichen darin, und der Aufruf von $ .get () schlug stillschweigend fehl.

jorisw
quelle
0

OK! Ich weiß, dass jQuery geladen wird. Ich weiß, dass jQuery.textshadow.jsgeladen wird. Ich kann beide Skripte in den Entwicklertools finden.

Der seltsame Teil: Dieser Code funktioniert im Inhaltsbereich, aber nicht im Banner. Auch mit einem engagierten fixIE.css. UND es funktioniert, wenn ich das CSS inline setze. (Das bringt FireFox natürlich durcheinander.)

Ich habe sogar eine bedingte IE-Spanne um das Textfeld im Banner eingefügt, ohne Glück.

Ich fand keinen Unterschied und hatte die gleichen Fehler in beiden jquery-1.4.2.min.jsund jquery-1.2.6.min.js. jquery.textshadow.jswurde von der jQuery-Site heruntergeladen, als versucht wurde, eine Lösung für dieses Problem zu finden.

Dies wird nicht auf der Website veröffentlicht

Kyle
quelle