2008-09-26 26 views
17

¿Alguien sabe cómo conseguir el código HTML de un IFRAME He intentado varias maneras diferentes:Javascript iframe innerHtml

document.getElementById('iframe01').contentDocument.body.innerHTML 
document.frames['iframe01'].document.body.innerHTML 
document.getElementById('iframe01').contentWindow.document.body.innerHTML 

etc

+1

Para cualquier otra persona que aterriza aquí de una búsqueda en Google, en Firefox, al menos, quizás también tratan 'theiFrameObject.contentDocument.body.innerHTML'. –

+1

@ La solución de MattBlaine funciona, pero el iframe src necesita estar en el mismo dominio que la ventana principal. De lo contrario, el iframe tendrá que pasar su ventana al padre en la carga 'parent.ifw = window' y luego el padre puede usar' window.ifw.document' –

Respuesta

8

Si se echa un vistazo a JQuery, se puede hacer algo como :

<iframe id="my_iframe" ...></iframe> 

$('#my_iframe').contents().find('html').html(); 

Esto es suponiendo que su matriz de marco flotante y el niño residen en el mismo servidor, debido a la Same Origin Policy en Javascript.

+2

Usted está agarrando el innerHTML del elemento html y no el cuerpo, y este es un método bastante retroactivo para hacerlo. Cuando hay propiedades de DOM nativas para recuperar lo que desea (por ejemplo, .body), debe evitar la sobrecarga de una llamada de búsqueda. – Prestaul

+0

+1 esto funciona en todos los principales navegadores – ravi404

+13

¡Deje de usar un jQuery como respuesta, por favor! –

13

creo que esto es lo que quiere:

window.frames['iframe01'].document.body.innerHTML 

EDIT:

Sé de buena fuente que esto no va a funcionar en Chrome y Firefox aunque funciona perfectamente en IE, que es donde lo probé. En retrospectiva, que fue un gran error

Esto funcionará:

window.frames[0].document.body.innerHTML 

entiendo que esto no es exactamente lo que se le pedía, pero no quieren eliminar la respuesta es porque creo que tiene un lugar .

Me gusta la respuesta de @ ravz's jquery a continuación.

+1

Y si quieres ser más inequívoco podrías decir: window.frames ['iframe01']. Document.body.innerHTML – Prestaul

+0

Estoy de acuerdo. Gracias – wcm

+2

No funciona en Chrome. :( – Kane

3

No olvide que no puede cruzar dominios debido a la seguridad.

Si este es el caso, debe usar JSON.

10

Tener algo como lo siguiente funcionaría.

<iframe id = "testframe" onload = populateIframe(this.id);></iframe> 

// The following function should be inside a script tag 

function populateIframe(id) { 

    var text = "This is a Test" 
var iframe = document.getElementById(id); 

var doc; 

if(iframe.contentDocument) { 
    doc = iframe.contentDocument; 
} else { 
    doc = iframe.contentWindow.document; 
} 

doc.body.innerHTML = text; 

    } 
+0

Brillante! Eres el !!! mejor –

2

Puede usar la propiedad contentDocument o contentWindow para tal fin. Aquí está el código de muestra.

function gethtml() 
{ 
var x=document.getElementById("myframe"); 
var y=(x.contentWindow || x.contentDocument); 
if (y.document)y=y.document; 
alert(y.body.innerHTML); 
} 

aquí, mi marco es el id de tu iframe. Nota: No puede extraer el contenido de un iframe de un src fuera de su dominio.

6

La respuesta de Conroy era correcta. En el caso de que necesite solamente cosas de la etiqueta del cuerpo, sólo tiene que utilizar:

$('#my_iframe').contents().find('body').html(); 
+0

mejor respuesta Gracias no olvide:

2
document.getElementById('iframe01').outerHTML 
1

Usted puede obtener el código fuente de otro dominio si instala el filtro ForceCORS en Firefox. Cuando active este filtro, omitirá la función de seguridad en el navegador y su secuencia de comandos funcionará incluso si intenta leer otra página web. Por ejemplo, podría abrir FoxNews.com en un iframe y luego leer su fuente. La razón por la cual los web brwosers modernos niegan esta capacidad por defecto es porque si el otro dominio incluye un fragmento de JavaScript y estás leyendo eso y mostrándolo en tu página, podría contener código malicioso y representar una amenaza a la seguridad. Por lo tanto, cada vez que muestre datos de otro dominio en su página, debe tener cuidado con esta amenaza real e implementar una forma de filtrar todo el código JavaScript del texto antes de mostrarlo.Recuerde, cuando una supuesta pieza de texto sin procesar contiene algún código incluido en las etiquetas de script, no se mostrarán cuando lo muestre en su página, ¡sin embargo, se ejecutarán! Entonces, date cuenta de que esto es una amenaza.

http://www-jo.se/f.pfleger/forcecors