<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>
Ce que je veux, c'est:
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>
Ce que je veux, c'est:
test<br/>
Réponses:
La question exacte est de savoir comment le faire avec du JavaScript pur et non avec jQuery.
Mais j'utilise toujours la solution qui se trouve dans le code source de jQuery. C'est juste une ligne de JavaScript natif.
Pour moi, c'est le meilleur moyen, facile à lire et même le plus court pour obtenir le contenu des iframes.
Commencez par obtenir votre iframe
var iframe = document.getElementById('id_description_iframe');
// or
var iframe = document.querySelector('#id_description_iframe');
Et puis utilisez la solution de jQuery
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
Cela fonctionne même dans Internet Explorer qui fait cette astuce lors de la
contentWindow
propriété de l'iframe
objet. La plupart des autres navigateurs utilisent lacontentDocument
propriété et c'est la raison pour laquelle nous vérifions cette propriété d'abord dans cette condition OR. Si ce n'est pas le cas, essayezcontentWindow.document
.
Sélectionnez des éléments dans l'iframe
Ensuite, vous pouvez généralement utiliser getElementById()
ou même querySelectorAll()
sélectionner l'élément DOM à partir de iframeDocument
:
if (!iframeDocument) {
throw "iframe couldn't be found in DOM.";
}
var iframeContent = iframeDocument.getElementById('frameBody');
// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
Appeler des fonctions dans l'iframe
Obtenez juste l' window
élément de iframe
pour appeler des fonctions globales, des variables ou des bibliothèques entières (par exemple 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 /*, ... */);
Remarque
Tout cela est possible si vous observez la politique de même origine .
document.querySelector('#id_description_iframe').onload = function() {...
espérant que cela aide quelqu'un.
En utilisant JQuery, essayez ceci:
$("#id_description_iframe").contents().find("body").html()
cela fonctionne parfaitement pour moi:
document.getElementById('iframe_id').contentWindow.document.body.innerHTML;
.body
ne fonctionne pas. Mais le .getElementsByTagName('body')[0]
fait.
AFAIK, un Iframe ne peut pas être utilisé de cette façon. Vous devez pointer son attribut src vers une autre page.
Voici comment obtenir son contenu corporel en utilisant l'ancien javascript d'avion. Cela fonctionne avec IE et 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);
}
Je pense que placer du texte entre les balises est réservé aux navigateurs qui ne peuvent pas gérer les iframes, c'est-à-dire.
<iframe src ="html_intro.asp" width="100%" height="300">
<p>Your browser does not support iframes.</p>
</iframe>
Vous utilisez l'attribut 'src' pour définir la source des iframes html ...
J'espère que cela aide :)
Le code suivant est compatible avec tous les navigateurs. Il fonctionne dans IE7, IE8, Fx 3, Safari et Chrome, donc pas besoin de gérer les problèmes entre navigateurs. N'a pas testé dans 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
est indéfini pour moi. (Ubuntu 13.04, Chrome)
Chalkey est correct, vous devez utiliser l'attribut src pour spécifier la page à contenir dans l'iframe. À condition que vous le fassiez et que le document de l'iframe se trouve dans le même domaine que le document parent, vous pouvez utiliser ceci:
var e = document.getElementById("id_description_iframe");
if(e != null) {
alert(e.contentWindow.document.body.innerHTML);
}
Évidemment, vous pouvez alors faire quelque chose d'utile avec le contenu au lieu de simplement le mettre en alerte.
Pour obtenir le contenu du corps de javascript, j'ai essayé le code suivant:
var frameObj = document.getElementById('id_description_iframe');
var frameContent = frameObj.contentWindow.document.body.innerHTML;
où "id_description_iframe" est l'identifiant de votre iframe. Ce code fonctionne bien pour moi.