10
votes

Impossible d'accéder à un sujet: iframe vierge dans IE après la modification du document.Domain

Est-ce que quelqu'un connaît des solutions de contournement à créer un à propos de: vide iframe sur une page dans IE lorsque le document .domain a changé?

IE Ne semble pas permettre l'accès aux iframes vides / dynamiques après la propriété document.domain a été modifiée.

Par exemple, imaginez que vous créez de manière dynamique une iframe, puis injectant du code HTML dans: xxx

Voici un exemple en direct sur Jsfiddle: http://jsfiddle.net/xhkut/

Vous remarquerez qu'il fonctionne bien en FF / Webkit, mais pas ie. C'est particulièrement frustrant car cela affecte les iframes créés après la propriété document.domain a changé (comme dans l'exemple ci-dessus).

La règle IE semble être "Si vous créez une iframe dynamique / vide après avoir changé document.domain , vous ne pouvez pas accéder à son DOM." < p> définir l'iframe src à à propos de: vide JavaScript: void (0) ou JavaScript: "" a été infructueux.


2 commentaires

Le protocole à propos de: peut être limité en fonction des paramètres / Version IE: msdn.microsoft.com/en-us/library/ee330729 (v = vs.85) .aspx (voir" À propos de la restriction de protocole "chapitre)


Remarque: ce bogue semble être corrigé dans IE11.


3 Réponses :


0
votes

J'ai toujours travaillé autour de problèmes comme celui-ci en définissant le SRC de l'iframe à un fichier vierge qui vit sur le même domaine que le domaine du parent. S'il est possible de créer un tel fichier sur jshell.net , je recommanderais quelque chose comme: xxx

blank.html contient simplement Un peu de chaudière, par exemple: xxx


1 commentaires

Malheureusement, il n'y a pas d'écriture d'écriture au domaine que le script est hébergé (le code JavaScript lui-même est un widget qui doit fonctionner partout).



0
votes

Si l'iframe.src et le document.Location sont sur différents domaines (ou sous-domaines) que vous avez par définition ne disposez pas d'accès du parent à l'enfant. Cependant, vous avez accès à l'enfant au parent. L'une des techniques utilisées lors du chargement croisé JavaScript utilise le fait que l'IFrame peut appeler une méthode dans la fenêtre du conteneur lorsqu'elle est chargée.

Seulement si les deux documents sont sur différents sous-domaines, vous pouvez modifier le document.Domain pour correspondre au domaine de l'IFrame.src pour activer l'accès.

En savoir plus sur la même politique d'origine ici:

http://en.wikipedia.org/wiki/same_origin_policy

http://softwareas.com/cross-domain-communication-vith-iframes < / a>


0 commentaires

5
votes

Êtes-vous heureux de changer le domaine de l'iframe? Les travaux suivants (pour moi) dans IE7,9

document.domain = 'jshell.net';

var iframe = document.createElement('iframe');
document.body.appendChild(iframe);
iframe.src = "javascript:document.write('<script>document.domain=\"jshell.net\"</script>')";

// Now write some content to the iframe
iframe.contentWindow.document.write('<html><body><p>Hello world</p></body></html>');


4 commentaires

Cela fonctionne, merci. Il semble également fonctionner bien en FF / WebKit. Vous aurez besoin de séparer les balises