Je voudrais manipuler le HTML à l'intérieur d'un iframe en utilisant jQuery.
Je pensais pouvoir le faire en définissant le contexte de la fonction jQuery comme étant le document de l'iframe, quelque chose comme:
$(function(){ //document ready
$('some selector', frames['nameOfMyIframe'].document).doStuff()
});
Cependant, cela ne semble pas fonctionner. Un peu d'inspection me montre que les variables frames['nameOfMyIframe']
sont à undefined
moins que j'attende un moment que l'iframe se charge. Cependant, lorsque l'iframe se charge, les variables ne sont pas accessibles (j'obtiens des permission denied
erreurs de type).
Quelqu'un connaît-il une solution à ce problème?
.contentWindow.document
que.document
sur l'iframe
élément. Je proposerai le changement ci-dessus.Réponses:
Je pense que ce que vous faites est soumis à la même politique d'origine . Cela devrait être la raison pour laquelle vous obtenez des erreurs de type d'autorisation refusée .
la source
Si le
<iframe>
est du même domaine, les éléments sont facilement accessibles commeRéférence
la source
same origin policy
, auquel cas cette réponse n'est pas une solution pour lui.Vous pouvez utiliser la
.contents()
méthode de jQuery.la source
Si le src iframe provient d'un autre domaine, vous pouvez toujours le faire. Vous devez lire la page externe en PHP et l'écho de votre domaine. Comme ça:
iframe_page.php
Alors quelque chose comme ça:
display_page.html
Ce qui précède est un exemple de modification d'une page externe via un iframe sans que l'accès soit refusé, etc.
la source
same origin policy
existe, et la proposition de cette réponse n'y échappe pas.Je trouve cette façon plus propre:
la source
Utilisation
au lieu de
la source
Vous devez attacher un événement au gestionnaire de chargement d'une iframe et y exécuter les js, afin de vous assurer que l'iframe a fini de se charger avant d'y accéder.
Ce qui précède résoudra le problème `` pas encore chargé '', mais en ce qui concerne les autorisations, si vous chargez une page dans l'iframe qui provient d'un domaine différent, vous ne pourrez pas y accéder en raison de restrictions de sécurité.
la source
Vous pouvez utiliser window.postMessage pour appeler une fonction entre la page et son iframe (cross-domain ou non).
Documentation
page.html
iframe.html
la source
Je préfère utiliser une autre variante pour y accéder. Du parent, vous pouvez avoir accès à une variable dans l'iframe enfant.
$
est aussi une variable et vous pouvez avoir accès à son appel justewindow.iframe_id.$
Par exemple,
window.view.$('div').hide()
- masquez toutes les divs dans iframe avec l'id 'view'Mais cela ne fonctionne pas dans FF. Pour une meilleure compatibilité, vous devez utiliser
$('#iframe_id')[0].contentWindow.$
la source
Avez-vous essayé le classique en attendant la fin de la charge en utilisant la fonction prête à l'emploi de jQuery?
K
la source
Je crée un exemple de code. Maintenant, vous pouvez facilement comprendre à partir d'un domaine différent que vous ne pouvez pas accéder au contenu de iframe .. Même domaine, nous pouvons accéder au contenu iframe
Je vous partage mon code, veuillez exécuter ce code, vérifiez la console. J'imprime l'image src sur la console. Il y a quatre iframe, deux iframe provenant du même domaine et deux autres d'un autre domaine (tiers) .Vous pouvez voir deux images src ( https://www.google.com/logos/doodles/2015/googles-new-logo -5078286822539264.3-hp2x.gif
et
https://www.google.com/logos/doodles/2015/arbor-day-2015-brazil-5154560611975168-hp2x.gif ) sur la console et peut également voir deux erreurs d'autorisation (2 Erreur: autorisation refusée pour accéder au document de la propriété) "
... irstChild)}, contenu: function (a) {return m.nodeName (a, "iframe")? a.contentDocument ...
) qui provient d'un iframe tiers.
la source
Je me suis retrouvé ici à chercher le contenu d'une iframe sans jquery, donc pour quiconque le recherche, c'est juste ceci:
la source
Cette solution fonctionne de la même manière que iFrame. J'ai créé un script PHP qui peut obtenir tous les contenus de l'autre site Web, et le plus important est que vous pouvez facilement appliquer votre jQuery personnalisée à ce contenu externe. Veuillez vous référer au script suivant qui peut obtenir tout le contenu de l'autre site Web, puis vous pouvez également appliquer votre jQuery / JS cusom. Ce contenu peut être utilisé n'importe où, à l'intérieur de n'importe quel élément ou de n'importe quelle page.
la source
Pour encore plus de robustesse:
et
la source