Frage Fehler in Internet Explorer 9 (keine früheren Versionen oder andere Browser) beim Einschließen von jQuery in einen iframe


Im Grunde habe ich eine Seite, die einen fancybox iframe gestartet hat. In diesem Iframe schließe ich auch jQuery ein. Aber wenn ich es in Internet Explorer 9 teste, gibt es mir den Fehler

Zeile: 68 \ n Fehler: 'Objekt' ist nicht definiert`

Dieser Fehler ist in der Datei jquery-1.4.1.js und die fragliche Zeile ist die zweite Zeile davon:

// Save a reference to some core methods
toString = Object.prototype.toString,
hasOwnProperty = Object.prototype.hasOwnProperty,
push = Array.prototype.push,
slice = Array.prototype.slice,
indexOf = Array.prototype.indexOf;

Das ist die letzte Zeile des var jQuery = function( selector, context ) {.

Kein Problem, wenn ich in der Kompatibilitätsansicht bin, kein Problem in anderen Browsern, nur Internet Explorer 9 im Internet Explorer 9-Modus und Internet Explorer 9-Standards. Wenn ich den Fehler ignoriere, sehe ich keine Probleme mit einer Version von jQuery.

Was ist los und was kann ich reparieren?


11
2018-06-30 00:59


Ursprung


Antworten:


Das Problem wurde behoben, als ich das SRC-Attribut aus dem iframe entfernte und das OnOpen-Ereignis zum jQuery-Dialog hinzufügte:

open: function()
  {
    document.getElementById("mainFrame").src = "/login.aspx";
  }

8
2017-07-28 14:52



Ich hatte das GENAUE gleiche Problem, aber die Ursache von meinem war anders. Ich dachte mir, ich würde es hier teilen, für den Fall, dass andere im gleichen Boot sind wie ich - vor allem, weil ich ungefähr 4 Stunden gebraucht habe, um aufzuspüren ...

Unsere Hauptseite hatte einen Iframe, der sein src-Attribut zweimal innerhalb kürzester Zeit änderte (wir haben tatsächlich zweimal den gleichen src aus Versehen geladen - einmal direkt im HTML und dann wieder beim Laden der Seite über JavaScript). Ich bin mir nicht sicher, warum Internet Explorer 9 erstickt, aber ich vermute, dass der Frame seine Skripte teilweise initialisiert hat, als der Quellcode erneut gesetzt wurde, was die JavaScript-Engine in einen unglücklichen Zustand versetzt hat. Wie auch immer, ich bin froh, dass ich es gefunden habe, denn wir hätten den Rahmen nicht zweimal laden sollen!

Der wahre Grund, warum Internet Explorer 9 so schlimm starb, ist jedoch ein Rätsel.


3
2017-09-15 23:35



Dies ist ein verwandtes Problem: IE9 löst beim Laden von Skripten in iframe Ausnahmen aus. Warum?

Es scheint ein echtes Problem im Internet Explorer zu geben, bei dem native globale Objekte wie "Function" und "Object" unter bestimmten Umständen undefiniert sind, wenn Skripte früher (im Kopfbereich) eines iframes geladen werden ...

Ich habe ein Kopfgeld auf diese andere Frage gelegt, um mehr Aufmerksamkeit darauf zu lenken.

Aus Erfahrung weiß ich, dass dieses Problem auch in IE8 existiert, aber es war dort seltener. Sieht aus wie in IE9 ist es schlimmer geworden ...


2
2017-12-30 14:19



Oh, dachte ich, ich hätte die neueste Geschenkbox. Stellt sich heraus, ich hatte 1.3.1, 1.3.4 behebt dieses Problem.

UPD (sompylasar): In der Tat wurde das in 1.3.2 behoben (siehe Änderungsprotokoll). Ich habe das verglichen Quellcode von 1.3.2 mit 1.3.1 und fand den folgenden Unterschied, der das Problem löst:

content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank');

woher isIE6 bewertet zu:

isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,

Dieses Snippet sollte vor dem Entfernen des iframe aus dem DOM.


2
2017-08-05 19:28