Est-il possible de lire/éditer le contenu iframe (pas seulement les propriétés comme src) avec les scripts qui sont sur la page mais en dehors de ce cadre? Je sais que c'est impossible si la source provient d'un autre site car ce serait un gros trou de sécurité, mais je demande seulement si cela fonctionne pour d'autres contenus de la même origine.Javascript et mêmes iframes d'origine
Répondre
si le iframe contenu est du même domaine, vous pouvez y accéder en utilisant frames.myiframe.getElement...
Le navigateur ne restreint l'accès au contenu iFrame/parent pour le contenu qui ne provient pas du même domaine. Pour les demandes du même domaine, vous pouvez accéder au contenu via window.parent
ou via myiframe.document.getElementById
Oui, vous pouvez le faire si l'emplacement de la page iframe et parents sont du même hôte (règle d'origine).
Pour assurer le navigateur vous permettra de cela, vous pouvez utiliser
document.domain = "example.com"
sur la page mère et dans le iframe. (Notez que subdomain.example.com et example.com sont différentes)
méthode Dom pour ce faire (page parent iframe):
document.getElementById("myiframe").contentWindow.document.getElementById("divinframe").innerHTML = "I'm on the inside.";
document.getElementById("myiframe").contentWindow.someFunctionInsideIframe();
contentWindow est la réponse et fonctionne dans la plupart, sinon tous les navigateurs modernes, certainement chrome, ie7 + etc.
Pour aller dans l'autre sens (iframe to parent page):
top.document.getElementById("DivInTopParent")
Pour ajouter à ce qui a déjà été dit au sujet de l'interaction avec les iframes chargés du même domaine:
Le navigateur vous permettra d'interagir avec les iframes (ou cadres) tant que la page qui tente pour faire l'interaction et la page que vous avez chargée ont le même document.domain.
Vous pouvez définir le document.domain sur un suffixe de l'hôte à partir duquel vous avez été chargé. par exemple. si vous avez une page chargée de blog.fred.com et il veut interagir avec un service appelé jsonservice.fred.com, les deux pages devront faire
document.domain = 'fred.com';
avant javascript d'un sera en mesure d'interagir avec L'autre.
Les navigateurs sont assez intelligents pour ne pas vous permettre de définir votre document.domain « .com », au cas où vous vous demandiez ...
Ce n'est pas exactement un côté client/javascript solution, mais m'a aidé à résoudre le problème.
Vous devez supprimer l'en-tête X-Frame-Options
, le cas échéant, et au lieu d'envoyer le suivant pour la page iframe:
Content-Security-Policy: frame-ancestors 'self' example.com *.example.com
et un supplémentaire pour IE:
X-Content-Security-Policy: frame-ancestors 'self' example.com *.example.com
Je pense que ce lien indique tout ça [Scripting Iframes - Tutoriel et exemples] (http://www.dyn-web.com/tutorials/iframes/) – mplungjan