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


116

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

contenu iframe: <div id="myContent"></div>

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

Comment puis-je y accéder myContent?


Similaire à jquery / javascript: accéder au contenu d'une iframe mais la réponse acceptée n'est pas celle que je recherchais.


Je viens de découvrir que la variable $ intégrée dans la console 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 j'ai compris que je n'avais pas chargé le code source de jQuery).
— eel ghEEz

Réponses:


214

Vous devez utiliser la contents()méthode:

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

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

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


3
donnez-moi une erreur: Erreur: Autorisation refusée d'accéder à la propriété 'ownerDocument'
— Imran Khan

26
ime: Cela vous donne probablement une erreur pour les raisons suivantes: 1) Iframe n'appartient pas au même domaine. 2) Vous essayez de le lire avant l'événement de chargement Iframe.
— iMatoria

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

2
L'URL source est cassée.
— karthzDIGI

1
@jperezmartin: Vous devrez utiliser une bibliothèque javascript qui transférera les informations entre la page principale et l'iframe. Fondamentalement, il a été refusé par le navigateur en raison de la fonctionnalité Cross Browser. Je suis désolé, je ne connais aucune bibliothèque de ce type car je n'en ai jamais eu besoin.
— iMatoria

21
<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>

15

Si la source d'iframe est un domaine externe, les navigateurs masqueront le contenu de l'iframe (même politique d'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);
?>

puis, récupérez le nouveau contenu du fichier (chaîne) et analysez-le en html, par exemple (dans jquery):

$.get(file_url, function(string){
    var html = $.parseHTML(string);
    var contents = $(html).contents();
},'html');
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.