<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>
Quello che voglio ottenere è:
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>
Quello che voglio ottenere è:
test<br/>
Risposte:
La domanda esatta è come farlo con JavaScript puro non con jQuery.
Ma uso sempre la soluzione che si trova nel codice sorgente di jQuery. È solo una riga di JavaScript nativo.
Per me è il migliore, di facile lettura e anche per quanto ne so la via più breve per ottenere il contenuto iframe.
Per prima cosa prendi il tuo iframe
var iframe = document.getElementById('id_description_iframe');
// or
var iframe = document.querySelector('#id_description_iframe');
E poi usa la soluzione di jQuery
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
Funziona anche in Internet Explorer che fa questo trucco durante la
contentWindow
proprietàiframe
dell'oggetto. La maggior parte degli altri browser utilizza lacontentDocument
proprietà e questo è il motivo per cui proviamo prima questa proprietà in questa condizione OR. Se non è impostato, provarecontentWindow.document
.
Seleziona gli elementi in iframe
Quindi di solito puoi usare getElementById()
o anche querySelectorAll()
selezionare l'elemento DOM da iframeDocument
:
if (!iframeDocument) {
throw "iframe couldn't be found in DOM.";
}
var iframeContent = iframeDocument.getElementById('frameBody');
// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
Chiama le funzioni nell'iframe
Ottieni solo l' window
elemento da iframe
chiamare alcune funzioni globali, variabili o intere librerie (ad es. 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
Tutto ciò è possibile se si osserva la politica della stessa origine .
document.querySelector('#id_description_iframe').onload = function() {...
Spero che aiuti qualcuno.
Utilizzando JQuery, prova questo:
$("#id_description_iframe").contents().find("body").html()
Funziona perfettamente per me :
document.getElementById('iframe_id').contentWindow.document.body.innerHTML;
.body
non funziona. Comunque lo .getElementsByTagName('body')[0]
fa.
AFAIK, un Iframe non può essere utilizzato in questo modo. Devi puntare il suo attributo src su un'altra pagina.
Ecco come ottenere il contenuto del suo corpo usando javascript piano vecchio. Funziona con IE e 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);
}
utilizzare content
in iframe con JS:
document.getElementById('id_iframe').contentWindow.document.write('content');
Penso che posizionare il testo tra i tag sia riservato ai browser che non possono gestire iframe, ad es.
<iframe src ="html_intro.asp" width="100%" height="300">
<p>Your browser does not support iframes.</p>
</iframe>
Si utilizza l'attributo 'src' per impostare l'origine dell'ifml iframe ...
Spero che aiuti :)
Il seguente codice è compatibile con più browser. Funziona in IE7, IE8, Fx 3, Safari e Chrome, quindi non è necessario gestire problemi tra browser. Non testato in 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
è indefinito per me. (Ubuntu 13.04, Chrome)
Chalkey è corretto, è necessario utilizzare l'attributo src per specificare la pagina da contenere nell'iframe. Se lo fai, e il documento nell'iframe si trova nello stesso dominio del documento principale, puoi usare questo:
var e = document.getElementById("id_description_iframe");
if(e != null) {
alert(e.contentWindow.document.body.innerHTML);
}
Ovviamente puoi fare qualcosa di utile con i contenuti invece di metterli in allerta.
Per ottenere il contenuto del corpo da JavaScript, ho provato il seguente codice:
var frameObj = document.getElementById('id_description_iframe');
var frameContent = frameObj.contentWindow.document.body.innerHTML;
dove "id_description_iframe" è l'id del tuo iframe. Questo codice funziona bene per me.