Frage

Ich arbeite eine Seite zum Einrichten und Schwierigkeiten habe mit bekommen es in allen Browsern gut aussehen (eigentlich nur IE, wie es richtig für mozilla und webkit macht). Ich bin zu wollen Quirks-Modus, da IE6 vor ernsthaft erwägen alten IE Bugs behoben auszuschließen. Der Behälter enthält eine deklarierte Doctype, aber der Code iframe nicht. Wird der iframe Inhalt im Quirks-Modus wiedergegeben werden (weil es keinen Doctype hat) oder Standardmodus (weil der Behälter einen Doctype hat)? Die Quelle folgt diesem Schema:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
...
<body>
...
<iframe ...>
    <html>
    <head>
    ...
    </head>
    <body>
    ....
    </body>
    </html>
</iframe>
...
</body>
</html>
War es hilfreich?

Lösung


Caveat emptor

Wie einige haben leider versäumt, diese Antwort zu bemerken, wurde geschrieben und akzeptiert eine recht lange Zeit vor IE9 existierte, welche die Bedingungen der Frage ändert. Ich würde normalerweise gelöscht habe dies noch mehr downvotes Fang zu vermeiden, aber da die Antwort eigentlich immer noch wahr ist und leider relevant für einen wesentlichen Teil der Browser-Demografie, ich werde es überlassen. bitte einfach nicht downvote es nicht mehr.


Quirksmode. IE iframes als separates Dokument Knoten macht, Doctype nicht vererbt wird, und Macken ist die Standardeinstellung

Edit: jemand anderem Demonstration des Problems und der Nachweis der Nicht-Erbe (mit Dank an meine Lesezeichen: P)

Allerdings habe man „fast“ als Doctype gewählt, was bedeutet, iframes ohnehin nicht erlaubt sind. Die einzige Möglichkeit, gültige iframes bekommen könnte, ist, wenn die Eltern in Macken war die Erbschaft oder nicht strittig macht.

Empfohlene Lektüre .

Andere Tipps

Vor der IE9, die Webseite innerhalb des iframe machen würde nach eigener Doctype, nicht nach dem Doctype des übergeordneten Containers. Doch in IE9, änderte Microsoft das Verhalten so, dass das Kind iframe seine Doctype erbt / Rendering von der übergeordneten Container.

Beachten Sie, dass IE9 noch auf traditionelle Art und Weise verhalten (iframe ehrt seine eigene Doctype), wenn Kompatibilitätsansicht verwendet wird.

Die beste Abhilfe für Leute in Ihrer Situation - eine standardkonformes Container-Seite zu schreiben, sondern einen Iframe mit einer Quirksmodus Seite zu müssen schließen - ist eine der folgenden Meta-Tags zwischen Ihrem Doctype und dem Starttag in der hinzufügen übergeordnete Seite.

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

Diese Tags werden im Wesentlichen IE9 sagen zu tun, als es IE7 oder IE8 ist. in der Emulation einschließlich ist die Logik, um zu bestimmen Rendering-Modus für das Kind iframe verwendet. Der Nachteil dieser Problemumgehung ist, dass Sie nicht in der Lage sein werden, eine der neuen Funktionen von IE9 in Ihrer Mutter Seite unterstützt zu verwenden, aber das ist wahrscheinlich vorzuziehen massive Rendering Fehler in der untergeordneten Seite.

Unter http://web.archive.org/web/20110905060718/http://www.sitepoint.com/forums/html-xhtml-52/ie9-iframes-doctypes-you- 743000.html für weitere Informationen.

Siehe meine Antwort hier für MSDN dokumentierte Lösung für IE9: Wie Iframe zwingen Macken unter einem Standardgeordneten Rahmen

Kurz gesagt, es Trigger Quirks-Modus in einem Iframe nicht möglich ist, wenn die übergeordnete Seite in IE9 Rendering-Modus, aber es ist möglich , um Trigger "Quirks-Modus-Emulation" in dem IE9 Rendering-Engine eingebettet ist.

JSBin Demo: http://jsbin.com/ozejuk/1/

Weiterführende Literatur: http: // msdn .microsoft.com / en-us / library / gg558056 (v = VS.85) aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top