iframe contentWindow jette erreur d'Accès Refusé après un raccourcissement du document.domaine
- Je créer un IFRAME de façon dynamique dans la manière suivante:
var wrapUpIframe = document.createElement("iframe");
wrapUpIframe.id = 'WrapUpDialog3';
wrapUpIframe.src = 'WrapUpDialog.html';
document.body.appendChild(wrapUpIframe);
après la création dynamique de mon document.domain
est raccourcie de Servername.dc.com
à seulement dc.com
,
mais lorsque j'essaie d'accéder à contentWindow
j'ai un Accès refusé erreur:
document.getElementById("WrapUpDialog3").contentWindow.SomeFunction();
Remarque: Quand je définis l'IFRAME de manière statique dans le HTML, il fonctionne très bien.
J'ai aussi essayé de changer mon IFRAME document.domain
de la manière suivante:
WrapUpDialog3.document.domain = dc.com;
J'ai vérifié les deux document.domain
et mon IFRAME domaine et ils sont à la fois identiques.
Que puis-je faire?
Je travaille avec IE9.
- Dans ce navigateur obtenez-vous ce comportement? Si je tapez votre code dans le Chrome débogueur je peux accéder à
el.contentWindow
amende. Notez que non seulement le domaine doit correspondre mais l'origine, de sorte que vous pourriez essayer de comparerdocument.location.origin
des deux fenêtres. - Je travaille avec IE9
- Cela a été la réponse ici: stackoverflow.com/questions/364952/... Bertrand
- Mais il a dit que l'origine est la même.
- Qu'est-ce que
WrapUpDialog3
? Et comment avez-vous accèscontentWindow
? Si vous pouviez poster un exemple plus complet alors nous pourrions être en mesure de mieux vous aider. - WrapUpDialog3 est juste mon iFrame id et j'ai ajouté un exemple pour l'utilisation dans ma question
- Avez-vous essayé d'accéder à la
iframe
viaframes
collection, commewindow.frames[0].SomeFunction();
. - Quelle a été la chose qui a résolu le problème? Il y a un tas de trucs dans l'acceptation de réponse...
Vous devez vous connecter pour publier un commentaire.
D'abord prendre un coup d'oeil à la réponse correcte à partir de ce post. Il me semble que pourrait être votre problème.
Si ce n'est qu'alors peut-être que cette rapide hack que j'ai vu à partir d'un autre post pourrait aider.
Ne sais pas si c'est pertinent, mais j'ai aussi trouvé ceci sur le web lien.
OK, donc pour répondre à votre commentaire. La fonction javascript n'est pas de l'affectation de la source, c'est le réglage du domaine du document qui, apparemment, n'est pas effectué correctement dans I. E.
Découvrez ce lien pour un autre exemple et explication.
Donc ce que je voudrais essayer peut-être quelque chose comme ça ...
Vous pourriez avoir à jouer avec la façon de retourner l'url de l'iframe après l'exécution de la fonction qui définit le document de domaine. Mais de ce que je suis de voir ce qui pourrait fonctionner pour vous.
J'ai eu un problème similaire mais pas exactement le même problème et c'est pourquoi je ne peux pas vous donner une exacte correctif. Le réglage de la fonction du document de domaine est ce qui m'a passé l'erreur accès refusé.
Vous pouvez également ajouter à votre document principal de vraiment faire en sorte que les domaines de match.
Je voulais aussi ajouter un lien pour quelques explications sur la définition explicite de ce document.de domaine que j'avais utilisé avant. Cela a été utile pour moi dans le passé. Particulièrement cette citation ...
Dor, vous avez peut-être eu un problème de timing. J'ai trouvé un peu de code (ici) que j'ai testé qui fonctionne pour moi. Il permet de s'assurer que l'iframe est chargée avant de vous essayez d'accéder à la contentWindow.
Comment vous servir de vos fichiers? Voyez-vous
file:///
dans votre barre d'adresse? Si oui, essayez de servir votre code à l'aide d'un serveur web.Google Chrome donne une erreur d'accès refusé si j'essaie de votre code à l'aide de
file:///
, mais il fonctionne lorsqu'il est servi à partir d'un serveur web local (c'est à dire l'adresse commence parhttp://localhost/
).Puisque vous n'avez pas encore accepté aucune des réponses que vous avez probablement toujours le problème.
Essayez de définir
document.domain
explicitement dans les deux pages HTML (vous semblez le faire sur une seule page). Cela signifie que, comme @Vic proposé, vous devez ajouter le code javascript suivant pour le HTML qui inclut l'iframe:Cela signifie que votre code devrait ressembler à ceci:
Puis, dans
WrapUpDialog.html
lui-même (et non dans la page principale, car alors vous permettrait de contourner le système de sécurité!) vous devez définirdocument.domain
ainsi:Donc cette ligne de la vôtre ne fonctionnera PAS:
parce que
WrapUpDialog.html
lui-même doit accorder la permission de son "parent" de la page de l'exécution de son javascript.Il n'y a plus d'infos sur cette page: Ce n'document.domaine = document.domaine faire?.
Final conseil: ne tentez votre code à l'aide de différents navigateurs: IE9, Firefox, Google Chrome. Cela peut vous aider à identifier si vous êtes peut-être affaire à un caprice de l'un navigateur en particulier.