2012-11-09 4 views
1

I ont une page sur un domaine:Appel de la méthode de fenêtre parent de Iframe (différent)

http://main.mydomain.com/frame.cfm qui détient une iframe, chargement d'un domaine http://www.anotherdomain.com.

Cette page http://www.anotherdomain.com a une référence de script à http://sub.mydomain.com/somescript.js

Ce somescript est un script de suivi comme Google Analytics, qui charge à chaque demande de www.anotherdomain.com.

A un certain stade, le script http://sub.mydomain.com/somescript.js dans la page www.anotherdomain.com va essayer d'appeler window.top.aFunction(); or parent.aFunction();

pour que la fenêtre parent faire quelque chose. Je connais le X-Frame-Options et l'en-tête Access-Control-Allow-Origin et j'ai essayé les deux, mais quand je navigue sur mon iframe sur www.anotherdomain.com, je reçois un message d'erreur dans Firebug :

Error: Permission denied to access property 'relocate'window.top.aFunction(); 

dans mon web.config sur le site main.domain j'ai les règles suivantes:

<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="http://sub.mydomain.com" /> 
     <add name="X-Frame-Options" value="ALLOW-FROM http://sub.mydomain.com" /> 
    </customHeaders> 
</httpProtocol> 

Ce qui, à mon avis devrait accorder l'accès sub.mydomain.com au script sur la principale .mondomaine.com.

Je suis en train de tester ceci avec tous les domaines sauf le www.anotherdomain.com localement sur mon PC avec la référence de l'hôte en place.

Une idée de ce qui me manque ici?

Répondre

2

Vous ne pouvez pas accéder aux méthodes de la fonction de fenêtre parent via un iFrame interdomaine. Cela va à l'encontre du Same Origin Policy. La réponse d'en-tête X-Frame http indique au navigateur s'il est autorisé à afficher une page dans l'iFrame et n'aide pas votre situation.

La solution que je recommande est d'utiliser window.postMessage() pour communiquer entre les deux trames. Regardez http://ejohn.org/blog/cross-window-messaging/

+0

hmmm, d'accord. Ça ressemble un peu à un travail, n'est-ce pas? Internet Explorer ne semble pas le supporter, pour le moment. Et je dois soutenir IE7 +. En ce qui concerne la même politique d'origine: je trouve ennuyeux que ma page de script et ma page de cadre soient sur le même domaine principal. Cela devrait donner assez de sécurité à mon avis? Je pourrais mettre le script aussi sur le domaine main.mydomain.com, mais j'ai un framework qui fonctionne et qui va attraper ma requête de script séparée et qui nécessitera du code pour ignorer ce script dans le contexte du framework. Pas très élégant – Mattijs

+0

http://easyxdm.net/wp/ essayez d'utiliser cela, ajoute en IE7,6 support – ama2

+0

Merci! J'ai également remarqué que je suis autorisé à définir le parent.location à quelque chose d'autre par le script dans l'iframe. Appeler une fonction dans le parent en faisant la même chose que le paramétrer directement est apparemment différent, en termes de sécurité. Un peu étrange. Aussi, ce serait bien s'ils sont moins stricts s'ils ne regardent pas les sous-domaines mais au domaine. Devrait être assez sûr dans ma perspective actuelle. – Mattijs

Questions connexes