Quirksmode hatte eine Beitrag zu dieser .
Da die Seite jetzt kaputt ist und nur noch über archive.org zugänglich ist, habe ich sie hier wiedergegeben:
IFrames
Auf dieser Seite gebe ich einen kurzen Überblick über den Zugriff auf Iframes von der Seite aus, auf der sie sich befinden. Es überrascht nicht, dass es einige Überlegungen zum Browser gibt.
Ein iframe ist ein Inline-Frame, ein Frame, der zwar eine völlig separate Seite mit einer eigenen URL enthält, aber dennoch innerhalb einer anderen HTML-Seite platziert ist. Dies bietet sehr gute Möglichkeiten für die Gestaltung von Webseiten. Das Problem besteht darin, auf den iframe zuzugreifen, beispielsweise um eine neue Seite in ihn zu laden. Diese Seite erklärt, wie man das macht.
Rahmen oder Objekt?
Die grundlegende Frage ist, ob der iframe als Rahmen oder als Objekt betrachtet wird.
- Wie auf der Website Einführung in Rahmen Seiten, wenn Sie Frames verwenden, erstellt der Browser eine Frame-Hierarchie für Sie (
top.frames[1].frames[2]
und so weiter). Passt der iframe in diese Rahmenhierarchie?
- Oder sieht der Browser einen iframe nur als ein weiteres Objekt an, ein Objekt, das zufällig eine src-Eigenschaft hat? In diesem Fall müssen wir eine Standard DOM-Aufruf (wie
document.getElementById('theiframe'))
um darauf zuzugreifen. Im Allgemeinen erlauben Browser beide Ansichten auf "echte" (fest kodierte) iframes, aber auf generierte iframes kann nicht als Frames zugegriffen werden.
Attribut NAME
Die wichtigste Regel ist, dass Sie jedem iframe, den Sie erstellen, eine name
Attribut, auch wenn Sie zusätzlich ein id
.
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
Die meisten Browser benötigen die name
Attribut, um den iframe zu einem Teil der Framehierarchie zu machen. Einige Browser (vor allem Mozilla) benötigen das id
um den iframe als Objekt zugänglich zu machen. Indem Sie dem iframe beide Attribute zuweisen, halten Sie sich Ihre Optionen offen. Aber name
ist weitaus wichtiger als id
.
Zugang
Entweder Sie greifen auf den iframe als Objekt zu und ändern seine src
oder Sie greifen auf den iframe als Frame zu und ändern seine location.href
.
document.getElementById('iframe_id').src = 'newpage.html'; frames['iframe_name'].location.href = 'neueSeite.html'; Die Framesyntax ist leicht vorzuziehen, da Opera 6 sie unterstützt, nicht aber die Objektsyntax.
Zugriff auf den iframe
Für eine vollständige browserübergreifende Erfahrung sollten Sie dem iframe also einen Namen geben und die
frames['testiframe'].location.href
Syntax. Soweit ich weiß, funktioniert das immer.
Zugriff auf das Dokument
Der Zugriff auf das Dokument innerhalb des iframe ist recht einfach, vorausgesetzt, Sie verwenden die name
Attribut. Um die Anzahl der Links im Dokument im iframe zu zählen, gehen Sie wie folgt vor frames['testiframe'].document.links.length
.
Generierte iframes
Wenn Sie einen iframe über die Funktion W3C DOM wird der iframe nicht sofort in die frames
Array, und die frames['testiframe'].location.href
Die Syntax wird nicht sofort funktionieren. Der Browser braucht ein wenig Zeit, bevor der iframe im Array auftaucht, Zeit, in der kein Skript laufen darf.
El document.getElementById('testiframe').src
Syntax funktioniert unter allen Umständen gut.
El target
Attribut eines Links funktioniert auch nicht mit generierten iframes, außer in Opera, obwohl ich meinem generierten iframe sowohl ein name
und ein id
.
Das Fehlen von target
Unterstützung bedeutet, dass Sie JavaScript verwenden müssen, um den Inhalt eines generierten iframe zu ändern, aber da Sie sowieso JavaScript benötigen, um ihn überhaupt zu generieren, sehe ich dies nicht als großes Problem an.
Textgröße in Iframes
Ein merkwürdiger Fehler, der nur im Explorer 6 auftritt:
Wenn Sie die Textgröße über das Menü "Ansicht" ändern, werden die Textgrößen in Iframes korrekt geändert. Dieser Browser ändert jedoch nicht die Zeilenumbrüche im Originaltext, so dass ein Teil des Textes unsichtbar werden kann oder Zeilenumbrüche auftreten können, während die Zeile noch ein weiteres Wort enthalten könnte.