Quirksmode hatte einen Beitrag dazu .
Da die Seite jetzt kaputt ist und nur über archive.org zugänglich ist, habe ich sie hier reproduziert:
IFrames
Auf dieser Seite gebe ich einen kurzen Überblick über den Zugriff auf Iframes von der Seite, 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 vollständig separate Seite mit einer eigenen URL enthält, jedoch in einer anderen HTML-Seite platziert ist. Dies gibt sehr schöne Möglichkeiten im Webdesign. Das Problem besteht darin, auf den Iframe zuzugreifen, um beispielsweise eine neue Seite darin zu laden. Diese Seite erklärt, wie es geht.
Rahmen oder Objekt?
Die grundlegende Frage ist, ob der Iframe als Frame oder als Objekt gesehen wird.
- Wie in der Einführung zu Frames erläutert , erstellt der Browser bei Verwendung von Frames eine Frame-Hierarchie für Sie (
top.frames[1].frames[2]
und dergleichen). Passt der Iframe in diese Frame-Hierarchie?
- Oder sieht der Browser einen Iframe nur als ein anderes Objekt, ein Objekt, das zufällig eine src-Eigenschaft hat? In diesem Fall müssen wir einen Standard- DOM-Aufruf verwenden (
document.getElementById('theiframe'))
um darauf zuzugreifen. Im Allgemeinen erlauben Browser beide Ansichten für "echte" (fest codierte) Iframes, aber generierte Iframes können nicht als Frames aufgerufen werden.
NAME-Attribut
Die wichtigste Regel ist, jedem Iframe, den Sie erstellen, ein name
Attribut zu geben, auch wenn Sie auch ein verwenden id
.
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
Die meisten Browser benötigen das name
Attribut, um den Iframe in die Frame-Hierarchie aufzunehmen. Einige Browser (insbesondere Mozilla) benötigen den id
, um den Iframe als Objekt zugänglich zu machen. Indem Sie dem Iframe beide Attribute zuweisen, bleiben Ihre Optionen offen. Ist name
aber weitaus wichtiger alsid
.
Zugriff
Entweder greifen Sie als Objekt auf den Iframe zu und ändern ihn, src
oder Sie greifen als Frame auf den Iframe zu und ändern ihn location.href
.
document.getElementById ('iframe_id'). src = 'newpage.html'; frame ['iframe_name']. location.href = 'newpage.html'; Die Rahmensyntax ist etwas vorzuziehen, da Opera 6 sie unterstützt, nicht jedoch die Objektsyntax.
Zugriff auf den Iframe
Für eine vollständige browserübergreifende Erfahrung sollten Sie dem iframe einen Namen geben und den verwenden
frames['testiframe'].location.href
Syntax. Soweit ich weiß, funktioniert das immer.
Zugriff auf das Dokument
Der Zugriff auf das Dokument im Iframe ist recht einfach, sofern Sie das name
Attribut verwenden. Führen Sie die folgenden Schritte aus, um die Anzahl der Links im Dokument im Iframe zu zählen
frames['testiframe'].document.links.length
.
Iframes generiert
Wenn Sie einen Iframe über das W3C-DOM generieren, wird der Iframe nicht sofort in das eingegebenframes
Array , und die frames['testiframe'].location.href
Syntax funktioniert nicht sofort. Der Browser benötigt einige Zeit, bis der Iframe im Array angezeigt wird. Während dieser Zeit kann möglicherweise kein Skript ausgeführt werden.
Das document.getElementById('testiframe').src
Syntax funktioniert unter allen Umständen einwandfrei.
Das target
Attribut eines Links funktioniert auch nicht mit generierten Iframes, außer in Opera, obwohl ich meinem generierten Iframe sowohl ein name
als auch ein gegeben habeid
.
Der Mangel an target
Unterstützung bedeutet, dass Sie JavaScript verwenden müssen, um den Inhalt eines generierten Iframes zu ändern. Da Sie jedoch ohnehin JavaScript benötigen, um ihn zu generieren, sehe ich dies nicht als großes Problem an.
Textgröße in Iframes
Ein merkwürdiger Explorer 6-Fehler:
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, sodass ein Teil des Textes möglicherweise unsichtbar wird oder Zeilenumbrüche auftreten können, während die Zeile noch ein anderes Wort enthalten kann.