Risposte:
var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
Puoi semplicemente scrivere:
var iframe = document.getElementById('iframeId');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
e verrà restituito il primo documento interno valido.
Una volta ottenuto il documento interno, puoi semplicemente accedere ai suoi interni allo stesso modo in cui accederesti a qualsiasi elemento della tua pagina corrente. ( innerDoc.getElementById
... ecc.)
IMPORTANTE: assicurati che l'iframe si trovi sullo stesso dominio, altrimenti non potrai accedere ai suoi interni. Sarebbe uno scripting cross-site.
Non dimenticare di accedere a iframe dopo averlo caricato . Modo vecchio ma affidabile senza jQuery:
<iframe src="samedomain.com/page.htm" id="iframe" onload="access()"></iframe>
<script>
function access() {
var iframe = document.getElementById("iframe");
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
console.log(innerDoc.body);
}
</script>
window.parent.document.getElementById("framekit").contentWindow.CallYourFunction('pass your value')
CallYourFunction()
è la funzione all'interno della pagina e quella funzione su di essa
Le risposte sopra hanno dato buone soluzioni usando Javscript. Ecco una semplice soluzione jQuery:
$('#iframeId').contents().find('div')
Il trucco qui è il .contents()
metodo di jQuery , a differenza del .children()
quale può ottenere solo elementi HTML, .contents()
può ottenere sia nodi di testo che elementi HTML. Ecco perché si può ottenere il contenuto del documento di un iframe utilizzandolo.
Ulteriori letture su jQuery .contents()
: .contents ()
Si noti che l'iframe e la pagina devono trovarsi sullo stesso dominio.
Nessuna delle altre risposte funzionava per me. Ho finito per creare una funzione all'interno del mio iframe che restituisce l'oggetto che stavo cercando:
function getElementWithinIframe() {
return document.getElementById('copy-sheet-form');
}
Quindi chiamate quella funzione in questo modo per recuperare l'elemento:
var el = document.getElementById("iframeId").contentWindow.functionNameToCall();
Se iframe non si trova nello stesso dominio in modo tale da non poter ottenere l'accesso ai suoi interni dall'elemento principale ma è possibile modificare il codice sorgente dell'iframe, è possibile modificare la pagina visualizzata dall'iframe per inviare messaggi alla finestra padre, che consente per condividere informazioni tra le pagine. Alcune fonti:
Il codice seguente ti aiuterà a scoprire i dati iframe.
let iframe = document.getElementById('frameId');
let innerDoc = iframe.contentDocument || iframe.contentWindow.document;