Quirksmode avait un post à ce sujet .
Puisque la page est maintenant cassée et accessible uniquement via archive.org, je l'ai reproduite ici:
IFrames
Sur cette page, je donne un bref aperçu de l'accès aux iframes à partir de la page où ils se trouvent. Sans surprise, il y a quelques considérations sur le navigateur.
Un iframe est un cadre en ligne, un cadre qui, tout en contenant une page complètement séparée avec sa propre URL, est néanmoins placé dans une autre page HTML. Cela donne de très belles possibilités dans la conception web. Le problème est d'accéder à l'iframe, par exemple pour y charger une nouvelle page. Cette page explique comment procéder.
Cadre ou objet?
La question fondamentale est de savoir si l'iframe est considérée comme un cadre ou comme un objet.
- Comme expliqué dans les pages Introduction aux cadres , si vous utilisez des cadres, le navigateur crée une hiérarchie de cadres pour vous (
top.frames[1].frames[2]
et autres). L'iframe s'inscrit-il dans cette hiérarchie de trames?
- Ou le navigateur voit-il un iframe comme simplement un autre objet, un objet qui se trouve avoir une propriété src? Dans ce cas, nous devons utiliser un appel DOM standard (comme
document.getElementById('theiframe'))
pour y accéder. En général, les navigateurs autorisent les deux vues sur les iframes «réels» (codés en dur), mais les iframes générés ne sont pas accessibles en tant que trames.
Attribut NAME
La règle la plus importante est de donner à tout iframe que vous créez un name
attribut, même si vous utilisez également un id
.
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
La plupart des navigateurs ont besoin de l' name
attribut pour intégrer l'iframe à la hiérarchie des trames. Certains navigateurs (notamment Mozilla) nécessitent le id
pour rendre l'iframe accessible en tant qu'objet. En attribuant les deux attributs à l'iframe, vous gardez vos options ouvertes. Mais name
est beaucoup plus important que id
.
Accès
Soit vous accédez à l'iframe en tant qu'objet et changez son, src
soit vous accédez à l'iframe en tant que cadre et vous changez son location.href
.
document.getElementById ('iframe_id'). src = 'newpage.html'; frames ['iframe_name']. location.href = 'newpage.html'; La syntaxe du cadre est légèrement préférable car Opera 6 la prend en charge mais pas la syntaxe de l'objet.
Accéder à l'iframe
Donc, pour une expérience multi-navigateur complète, vous devez donner un nom à l'iframe et utiliser le
frames['testiframe'].location.href
syntaxe. Pour autant que je sache, cela fonctionne toujours.
Accéder au document
L'accès au document à l'intérieur de l'iframe est assez simple, à condition d'utiliser l' name
attribut. Pour compter le nombre de liens dans le document dans l'iframe, faites
frames['testiframe'].document.links.length
.
Iframes générés
Lorsque vous générez un iframe via le DOM W3C, l'iframe n'est pas immédiatement entré dans le frames
tableau, cependant, et la frames['testiframe'].location.href
syntaxe ne fonctionnera pas immédiatement. Le navigateur a besoin d'un peu de temps avant que l'iframe n'apparaisse dans le tableau, temps pendant lequel aucun script ne peut s'exécuter.
La document.getElementById('testiframe').src
syntaxe fonctionne bien en toutes circonstances.
L' target
attribut d'un lien ne fonctionne pas non plus avec les iframes générés, sauf dans Opera, même si j'ai donné à mon iframe généré à la fois un name
et un id
.
Le manque de target
support signifie que vous devez utiliser JavaScript pour modifier le contenu d'une iframe générée, mais comme vous avez quand même besoin de JavaScript pour le générer, je ne vois pas cela comme un problème.
Taille du texte dans les iframes
Un curieux bug uniquement pour Explorer 6:
Lorsque vous modifiez la taille du texte via le menu Affichage, les tailles de texte dans les iframes sont correctement modifiées. Toutefois, ce navigateur ne modifie pas les sauts de ligne dans le texte d'origine, de sorte qu'une partie du texte peut devenir invisible, ou des sauts de ligne peuvent se produire alors que la ligne peut toujours contenir un autre mot.