2009-07-06 11 views

Répondre

268
var iframe = document.getElementById('iframeId'); 
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document; 

Vous pouvez plus simplement écrire:

var iframe = document.getElementById('iframeId'); 
var innerDoc = iframe.contentDocument || iframe.contentWindow.document; 

et le premier doc interne valide sera retourné. Une fois que vous obtenez le document interne, vous pouvez simplement accéder à ses documents internes de la même manière que vous auriez accès à n'importe quel élément de votre page actuelle.

IMPORTANT (innerDoc.getElementById ... etc.): Assurez-vous que l'iframe est sur le même domaine, sinon vous ne pouvez pas avoir accès à ses internes. Ce serait un script inter-site.

+4

Bonne réponse. Saviez-vous que vous pouvez faire: var innerDoc = iframe.contentDocument || iframe.contentWindow.document; // plus lisible et signifie le même –

+1

ouais, je savais à ce sujet. – geowa4

+5

J'ai vu des gens confus par cela plus que des opérateurs ternaires. Ils ne semblent pas savoir que le premier valide est retourné. – geowa4

4
window.parent.document.getElementById("framekit").contentWindow.CallYourFunction('pass your value') 

CallYourFunction() est fonction page intérieure et que l'action de la fonction sur elle

+4

Cela appelle une fonction d'un iFrame, sans obtenir une référence à l'élément. –

1

Aucun des autres réponses travaillaient pour moi. J'ai fini par créer une fonction dans mon iframe qui retourne l'objet que je cherchais:

function getElementWithinIframe() { 
    return document.getElementById('copy-sheet-form'); 
} 

Ensuite, vous appelez cette fonction comme pour ainsi récupérer l'élément:

var el = document.getElementById("iframeId").contentWindow.functionNameToCall(); 
3

Ne pas oublier d'accéder iframe après son chargement. Ancien mais fiable sans 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> 
Questions connexes