<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>
O que eu quero é:
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>
O que eu quero é:
test<br/>
Respostas:
A pergunta exata é como fazê-lo com JavaScript puro e não com jQuery.
Mas eu sempre uso a solução que pode ser encontrada no código-fonte do jQuery. É apenas uma linha de JavaScript nativo.
Para mim é o melhor fácil leitura e até mesmo, afaik o caminho mais curto para obter o conteúdo iframe.
Primeiro obtenha seu iframe
var iframe = document.getElementById('id_description_iframe');
// or
var iframe = document.querySelector('#id_description_iframe');
E então use a solução do jQuery
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
Ele funciona mesmo no Internet Explorer, que faz esse truque durante a
contentWindow
propriedade doiframe
objeto. A maioria dos outros navegadores usa acontentDocument
propriedade e esse é o motivo pelo qual testamos essa propriedade primeiro nesta condição OR. Se não estiver definido, tentecontentWindow.document
.
Selecionar elementos no iframe
Em seguida, você pode usar getElementById()
ou até mesmo querySelectorAll()
selecionar o elemento DOM entre iframeDocument
:
if (!iframeDocument) {
throw "iframe couldn't be found in DOM.";
}
var iframeContent = iframeDocument.getElementById('frameBody');
// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
Chamar funções no iframe
Obtenha apenas o window
elemento de iframe
para chamar algumas funções globais, variáveis ou bibliotecas inteiras (por exemplo 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
Tudo isso é possível se você observar a política de mesma origem .
document.querySelector('#id_description_iframe').onload = function() {...
Espero que ajude alguém.
Usando o JQuery, tente o seguinte:
$("#id_description_iframe").contents().find("body").html()
Funciona perfeitamente para mim :
document.getElementById('iframe_id').contentWindow.document.body.innerHTML;
.body
não funciona. No entanto .getElementsByTagName('body')[0]
faz.
AFAIK, um Iframe não pode ser usado dessa maneira. Você precisa apontar seu atributo src para outra página.
Veja como obter seu conteúdo corporal usando javascript antigo de avião. Isso funciona com o IE e o 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);
}
use content
no iframe com JS:
document.getElementById('id_iframe').contentWindow.document.write('content');
Eu acho que colocar texto entre as tags é reservado para navegadores que não conseguem lidar com iframes, ou seja ..
<iframe src ="html_intro.asp" width="100%" height="300">
<p>Your browser does not support iframes.</p>
</iframe>
Você usa o atributo 'src' para definir a origem dos iframes html ...
Espero que ajude :)
O código a seguir é compatível com vários navegadores. Funciona no IE7, IE8, Fx 3, Safari e Chrome, portanto, não há necessidade de lidar com problemas entre navegadores. Não testou no 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.document
é indefinido para mim. (Ubuntu 13.04, Chrome)
Chalkey está correto, você precisa usar o atributo src para especificar a página a ser contida no iframe. Desde que você faça isso, e o documento no iframe esteja no mesmo domínio que o documento pai, você pode usar o seguinte:
var e = document.getElementById("id_description_iframe");
if(e != null) {
alert(e.contentWindow.document.body.innerHTML);
}
Obviamente, você pode fazer algo útil com o conteúdo, em vez de colocá-lo em alerta.
Para obter o conteúdo do corpo do javascript, tentei o seguinte código:
var frameObj = document.getElementById('id_description_iframe');
var frameContent = frameObj.contentWindow.document.body.innerHTML;
onde "id_description_iframe" é o ID do seu iframe. Este código está funcionando bem para mim.