Quirksmode tenía una publicación sobre esto .
Como la página ahora está rota y solo se puede acceder a través de archive.org, la reproduje aquí:
IFrames
En esta página, proporciono una breve descripción general del acceso a los iframes desde la página en la que se encuentran. No es sorprendente que haya algunas consideraciones sobre el navegador.
Un iframe es un marco en línea, un marco que, si bien contiene una página completamente separada con su propia URL, se coloca dentro de otra página HTML. Esto ofrece muy buenas posibilidades en el diseño web. El problema es acceder al iframe, por ejemplo, para cargar una nueva página en él. Esta página explica cómo hacerlo.
Marco u objeto?
La pregunta fundamental es si el iframe se ve como un marco o como un objeto.
- Como se explica en la Introducción a las páginas de marcos , si usa marcos, el navegador crea una jerarquía de marcos para usted (
top.frames[1].frames[2]
y tal). ¿Encaja el iframe en esta jerarquía de cuadros?
- ¿O el navegador ve un iframe como un objeto más, un objeto que tiene una propiedad src? En ese caso, tenemos que usar una llamada DOM estándar (como
document.getElementById('theiframe'))
acceder a ella. En general, los navegadores permiten ambas vistas en iframes 'reales' (codificados), pero no se puede acceder a los iframes generados como marcos.
NOMBRE atributo
La regla más importante es dar a cualquier iframe que cree un name
atributo, incluso si también usa un id
.
<iframe src="iframe_page1.html"
id="testiframe"
name="testiframe"></iframe>
La mayoría de los navegadores necesitan el name
atributo para que el iframe forme parte de la jerarquía de cuadros. Algunos navegadores (especialmente Mozilla) necesitan id
que el iframe sea accesible como un objeto. Al asignar ambos atributos al iframe, mantiene sus opciones abiertas. Pero name
es mucho más importante que id
.
Acceso
O accede al iframe como un objeto y lo cambia src
o accede al iframe como un marco y lo cambia location.href
.
document.getElementById ('iframe_id'). src = 'newpage.html'; marcos ['iframe_name']. location.href = 'newpage.html'; La sintaxis del marco es ligeramente preferible porque Opera 6 lo admite pero no la sintaxis del objeto.
Accediendo al iframe
Por lo tanto, para una experiencia completa entre navegadores, debe asignarle un nombre al iframe y usar el
frames['testiframe'].location.href
sintaxis. Hasta donde yo sé, esto siempre funciona.
Accediendo al documento
Acceder al documento dentro del iframe es bastante simple, siempre que use el name
atributo. Para contar el número de enlaces en el documento en el iframe, haga
frames['testiframe'].document.links.length
.
Iframes generados
Sin embargo, cuando genera un iframe a través del W3C DOM, el iframe no se ingresa inmediatamente en la frames
matriz, y elframes['testiframe'].location.href
sintaxis no funcionará de inmediato. El navegador necesita un poco de tiempo antes de que el iframe aparezca en la matriz, tiempo durante el cual no se puede ejecutar ningún script.
los document.getElementById('testiframe').src
sintaxis funciona bien en todas las circunstancias.
El target
atributo de un enlace tampoco funciona con los iframes generados, excepto en Opera, aunque di mi iframe generado tanto a name
como aid
.
La falta de target
soporte significa que debe usar JavaScript para cambiar el contenido de un iframe generado, pero dado que necesita JavaScript de todos modos para generarlo en primer lugar, no veo esto como un gran problema.
Tamaño del texto en iframes
Un curioso solo error del Explorer 6:
Cuando cambia el tamaño del texto a través del menú Ver, los tamaños de texto en iframes se cambian correctamente. Sin embargo, este navegador no cambia los saltos de línea en el texto original, por lo que parte del texto puede volverse invisible o pueden ocurrir saltos de línea mientras la línea aún puede contener otra palabra.