2010-08-30 12 views
1

Existe-t-il un moyen de "sortir" d'une iframe? Ce que je veux dire par là, c'est que les gens vont placer ma balise javascript à l'intérieur d'un iframe (parfois ça finit par être des iframes imbriqués, mais traitons juste un pour un maintenant). J'essaie de rassembler certaines informations, comme l'emplacement de cette iframe sur la page. Il est assez facile de le faire quand vous n'êtes pas dans un iframe avec un mélange de offsetLeft/offsetTop/innerHeight/innerWidth, mais je sais que vous ne pouvez pas (ou n'êtes pas censé pouvoir) voir quoi que ce soit en dehors de l'iframe votre entrée (en supposant différents domaines, ce qui sera le cas).Accéder à la page parente avec javascript à l'intérieur d'un iframe

Quelqu'un a des conseils à ce sujet? Ou au moins des ressources que je pourrais examiner plus? Bien que j'adorerais pouvoir accéder au DOM de la page d'origine, avec JS dans un iframe, je sais que ce n'est pas vraiment possible. Pour l'instant je serais heureux de comprendre où se trouve l'iframe sur la page. Je ne suis pas sûr si cette information fait partie du DOM, ou des propriétés de navigateur (que je crois que vous pouvez toujours accéder?)

Merci!

+0

Si vous souhaitez obtenir certaines informations (par exemple, l'emplacement), vous pouvez en faire une exigence pour fournir le contenu à vos clients. Donnez-leur juste des exemples de comment appeler votre contenu (fournir JS assistant, etc).Et votre page peut utiliser l'info ou renvoyer le contenu de l'erreur à l'appelant. –

+0

Oui, malheureusement, il y a des moments où mon tag sera passé entre un certain nombre de personnes, ajouté dans d'autres systèmes et craché de l'autre côté ect. Je ne suis donc pas en mesure de mettre en place des règles. Pouvez-vous accéder à l'URL de la page à laquelle vous vous rendez? Même si vous êtes imbriqué dans un ou plusieurs iframes? Ou est-ce que ça va encore à l'encontre de la politique de sécurité ... – Brad

Répondre

3

La réponse courte est non. La réponse la plus longue est que CORS et la messagerie multitrame/domaine vous sont maintenant mieux lotis que précédemment. Mais vous obtiendrez un gros "ACCESS REFUSÉ" si vous essayez d'accéder au DOM dans le cadre parent à partir d'un autre domaine.

Si vous mettez du javascript dans le parent qui peut charger des choses comme des images qui mettent des cookies sur votre serveur, alors oui. mais je suppose que ce n'est pas ce que vous entendez

Voici un exemple sur la façon dont vous pouvez obtenir l'origine - ont les utilisateurs de votre iframe charger comme ceci:

<script type="text/javascript"> 
    document.write('<script src="yourIframeLoader.php?parent='+escape(location.href)+'"><\/script>'); 
    </script> 
+0

Ouais c'est ce dont j'avais peur. Je vais regarder un peu plus dans le cadre croisé/messagerie de domaine et voir si ce _might_ m'aide, mais j'en doute. Le plus gros problème que j'ai est que je suis complètement hors de contrôle de quelle page je me retrouve. Donc il y aura différents domaines, je ne peux pas ajouter de JS pour charger des images/cookies, rien. Pouvez-vous au moins voir sur quel domaine vous vous retrouvez? Si vous êtes dans un ou plusieurs iframes, pouvez-vous accéder/voir à quelle page vous êtes finalement? – Brad

+0

Si le propriétaire du domaine parent n'ajoute pas de scripts supplémentaires à sa page, alors vous avez AFAIK complètement hors de la chance ces jours-ci. Si vous pouvez faire ajouter des extraits à la personne, vous pouvez faire des choses. Voir ma réponse pour des exemples – mplungjan

1

Cela ne fonctionne pas croisé domaine. C'est une fonctionnalité de sécurité majeure pour empêcher le JavaScript de fonctionner entre les domaines (c'est ce qu'on appelle la politique d'origine identique). Imaginez que vous commenciez sur un site maléfique: www.evil.com. A partir de là, d'une manière ou d'une autre, ils vous poussent à cliquer sur un lien que vous souhaitez vous rendre sur un site sensible (paypal, votre banque, etc.). Plutôt que de vous envoyer sur ce site, ils le font en réalité. Allez-y et connectez-vous. BAM.

Si leurs scripts avaient accès au DOM inter-domaine de l'iFrame, ils pourraient facilement accrocher n'importe quelle donnée que vous traversez les formulaires de connexion. Nasty, hein? Il n'y a aucun moyen de traiter ce en toute sécurité, il est donc arrêt (sauf, sans doute, JSONP)

0

Vous pouvez toujours mettre en œuvre des fonctions javascript sur la page et à les appeler à l'intérieur de l'iframe en appelant parent.Myfunction();

Quant à déterminer la position de l'iframe, je ne suis pas sûr sur celui-là.

0

Alors qu'un iFrame ne peut pas modifier directement son parent, le parent peut lire les données de l'iFrame.

Cela signifie que la page HTML parente peut utiliser JS pour examiner les données des iFrames enfants.

Si vous contrôlez à la fois le contenu parent et le contenu iFrame, vous pouvez configurer le passage du message de l'iFrame vers le parent via un ID d'élément convenu dans l'iFrame.