<iframe id="id_description_iframe" class="rte-zone" height="200" frameborder="0" title="description">
<html>
<head></head>
<body class="frameBody">
test<br/>
</body>
</html>
</iframe>
Lo que quiero obtener es:
test<br/>
<iframe id="id_description_iframe" class="rte-zone" height="200" frameborder="0" title="description">
<html>
<head></head>
<body class="frameBody">
test<br/>
</body>
</html>
</iframe>
Lo que quiero obtener es:
test<br/>
Respuestas:
La pregunta exacta es cómo hacerlo con JavaScript puro, no con jQuery.
Pero siempre uso la solución que se puede encontrar en el código fuente de jQuery. Es solo una línea de JavaScript nativo.
Para mí es el mejor, fácil de leer e incluso afaik la forma más corta de obtener el contenido de los iframes.
Primero obtenga su iframe
var iframe = document.getElementById('id_description_iframe');
// or
var iframe = document.querySelector('#id_description_iframe');
Y luego usa la solución de jQuery
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
Funciona incluso en Internet Explorer que hace este truco durante la
contentWindowpropiedad deliframeobjeto. La mayoría de los otros navegadores usan lacontentDocumentpropiedad y esa es la razón por la que primero probamos esta propiedad en esta condición OR. Si no está configurado, intentecontentWindow.document.
Seleccionar elementos en iframe
Luego, generalmente puede usar getElementById()o incluso querySelectorAll()seleccionar el elemento DOM de iframeDocument:
if (!iframeDocument) {
throw "iframe couldn't be found in DOM.";
}
var iframeContent = iframeDocument.getElementById('frameBody');
// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
Funciones de llamada en el iframe
Obtenga solo el windowelemento de iframepara llamar a algunas funciones globales, variables o bibliotecas completas (por ejemplo jQuery):
var iframeWindow = iframe.contentWindow;
// you can even call jQuery or other frameworks
// if it is loaded inside the iframe
iframeContent = iframeWindow.jQuery('#frameBody');
// or
iframeContent = iframeWindow.$('#frameBody');
// or even use any other global variable
iframeWindow.myVar = window.myVar;
// or call a global function
var myVar = iframeWindow.myFunction(param1 /*, ... */);
Nota
Todo esto es posible si observa la política del mismo origen .
document.querySelector('#id_description_iframe').onload = function() {... Hope, que ayuda a alguien.
Usando JQuery, intente esto:
$("#id_description_iframe").contents().find("body").html()
Funciona perfectamente para mí :
document.getElementById('iframe_id').contentWindow.document.body.innerHTML;
.bodyno funciona. Sin embargo lo .getElementsByTagName('body')[0]hace.
AFAIK, un Iframe no se puede usar de esa manera. Debe apuntar su atributo src a otra página.
Aquí le mostramos cómo obtener el contenido de su cuerpo usando JavaScript antiguo plano. Esto funciona tanto con IE como con Firefox.
function getFrameContents(){
var iFrame = document.getElementById('id_description_iframe');
var iFrameBody;
if ( iFrame.contentDocument )
{ // FF
iFrameBody = iFrame.contentDocument.getElementsByTagName('body')[0];
}
else if ( iFrame.contentWindow )
{ // IE
iFrameBody = iFrame.contentWindow.document.getElementsByTagName('body')[0];
}
alert(iFrameBody.innerHTML);
}
Creo que colocar texto entre las etiquetas está reservado para los navegadores que no pueden manejar iframes, es decir ...
<iframe src ="html_intro.asp" width="100%" height="300">
<p>Your browser does not support iframes.</p>
</iframe>
Utiliza el atributo 'src' para establecer la fuente de los iframes html ...
Espero que ayude :)
El siguiente código es compatible con todos los navegadores. Funciona en IE7, IE8, Fx 3, Safari y Chrome, por lo que no es necesario manejar problemas entre navegadores. No probé en IE6.
<iframe id="iframeId" name="iframeId">...</iframe>
<script type="text/javascript">
var iframeDoc;
if (window.frames && window.frames.iframeId &&
(iframeDoc = window.frames.iframeId.document)) {
var iframeBody = iframeDoc.body;
var ifromContent = iframeBody.innerHTML;
}
</script>
window.frames.iframeId.documentNo está definido para mí. (Ubuntu 13.04, Chrome)
Chalkey es correcto, debe usar el atributo src para especificar la página que se incluirá en el iframe. Siempre que haga esto, y el documento en el iframe esté en el mismo dominio que el documento principal, puede usar esto:
var e = document.getElementById("id_description_iframe");
if(e != null) {
alert(e.contentWindow.document.body.innerHTML);
}
Obviamente, puede hacer algo útil con los contenidos en lugar de simplemente ponerlos en alerta.
Para obtener contenido del cuerpo de javascript, probé el siguiente código:
var frameObj = document.getElementById('id_description_iframe');
var frameContent = frameObj.contentWindow.document.body.innerHTML;
donde "id_description_iframe" es la identificación de su iframe. Este código está funcionando bien para mí.