128 votes

Comment accéder au contenu d'une iframe avec jQuery ?

Comment puis-je accéder au contenu d'une iframe avec jQuery ? J'ai essayé de faire ça, mais ça ne marche pas :

le contenu de la iframe : <div id="myContent"></div>

jQuery : $("#myiframe").find("#myContent")

Comment puis-je accéder à myContent ?


Similar a jquery/javascript : accès au contenu d'une iframe mais la réponse acceptée n'est pas celle que je recherchais.

0 votes

Je viens de constater que la variable $ intégrée dans la console de Firefox ne ressemble pas du tout à un jQuery complet. (J'ai compris cela après avoir réalisé que je n'avais pas non plus la variable jQuery, puis après avoir compris que je n'avais pas chargé le code source de jQuery).

240voto

mbillard Points 15829

Vous devez utiliser le contents() méthode :

$("#myiframe").contents().find("#myContent")

Source : http://simple.procoding.net/2008/03/21/how-to-access-iframe-in-jquery/

API Doc : https://api.jquery.com/contents/

3 votes

Me donne une erreur : Erreur : Permission refusée pour accéder à la propriété 'ownerDocument'.

28 votes

Ime : L'erreur est probablement due aux raisons suivantes : 1) L'Iframe n'appartient pas au même domaine. 2) Vous essayez de le lire avant l'événement de chargement de l'Iframe.

1 votes

Existe-t-il un moyen de vérifier si le contenu de l'iframe provient du même domaine, avant d'essayer d'y accéder et d'obtenir une erreur ?

24voto

andres descalzo Points 8392
<html>
<head>
<title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.js"></script>
<script type="text/javascript">

$(function() {

    //here you have the control over the body of the iframe document
    var iBody = $("#iView").contents().find("body");

    //here you have the control over any element (#myContent)
    var myContent = iBody.find("#myContent");

});

</script>
</head>
<body>
  <iframe src="mifile.html" id="iView" style="width:200px;height:70px;border:dotted 1px red" frameborder="0"></iframe>
</body>
</html>

16voto

fireb86 Points 67

Si la source de l'iframe est un domaine externe, les navigateurs masqueront le contenu de l'iframe (politique de la même origine). Une solution de contournement consiste à enregistrer le contenu externe dans un fichier, par exemple (en PHP) :

<?php
    $contents = file_get_contents($external_url);
    $res = file_put_contents($filename, $contents);
?>

ensuite, récupérer le nouveau contenu du fichier (chaîne) et le parser en html, par exemple (dans jquery) :

$.get(file_url, function(string){
    var html = $.parseHTML(string);
    var contents = $(html).contents();
},'html');

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X