D'accord, j'ai une page sur et sur cette page j'ai une iframe. Ce que je dois faire est sur la page iframe, découvrez quelle est l'URL de la page principale.
J'ai cherché et je sais que ce n'est pas possible si ma page iframe est sur un domaine différent, car il s'agit de scripts intersites. Mais partout où j'ai lu, il est dit que si la page iframe est sur le même domaine que la page parent, cela devrait fonctionner si je le fais par exemple:
parent.document.location
parent.window.document.location
parent.window.location
parent.document.location.href
... ou d'autres combos similaires, car il semble y avoir plusieurs façons d'obtenir les mêmes informations.
Quoi qu'il en soit, voici le problème. Mon iframe est sur le même domaine que la page principale, mais ce n'est pas sur le même domaine SUB. Donc par exemple j'ai
http: // www.monsite.com/pageA.html
et puis mon URL iframe est
http: // qa-www.mysite.com/pageB.html
Lorsque j'essaye de récupérer l'URL de pageB.html
(la page iframe), j'obtiens toujours la même erreur d'accès refusé. Il semble donc que même les sous-domaines comptent comme des scripts intersites, est-ce correct ou est-ce que je fais quelque chose de mal?
la source
<iframe src="url?parent=parent-url"></iframe>
Réponses:
Vous avez raison. Les sous-domaines sont toujours considérés comme des domaines séparés lors de l'utilisation des iframes. Il est possible de transmettre des messages en utilisant
postMessage(...)
, mais d'autres API JS sont intentionnellement rendues inaccessibles.Il est également toujours possible d'obtenir l'URL en fonction du contexte. Voir les autres réponses pour plus de détails.
la source
Oui, l'accès à l'URL de la page parent n'est pas autorisé si l'iframe et la page principale ne sont pas dans le même (sous) domaine. Cependant, si vous avez juste besoin de l'URL de la page principale (c'est-à-dire l'URL du navigateur), vous pouvez essayer ceci:
Remarque:
window.parent.location
est autorisée; il évite l'erreur de sécurité dans l'OP, qui est provoquée par l'accès à lahref
propriété:window.parent.location.href
provoque "Bloqué une trame d'origine ..."document.referrer
fait référence à «l'URI de la page qui a lié à cette page». Cela peut ne pas renvoyer le document contenant si une autre source est ce qui a déterminé l'iframe
emplacement, par exemple:document.referrer
sera le domaine 3 , pas le domaine 1 contenantdocument.location
fait référence à "un objet Location, qui contient des informations sur l'URL du document"; vraisemblablement le document actuel , c'est-à-dire l'iframe actuellement ouvert. Quandwindow.location === window.parent.location
, alors l'iframehref
est le même que le parent contenanthref
.la source
document.domain
le cadre supérieur et celui le plus intérieur. peut être.var url = (parent !== window) ? document.referrer : document.location;
Referer-Policy
tête.Je viens de découvrir une solution de contournement pour ce problème qui est si simple, et pourtant je n'ai trouvé aucune discussion qui le mentionne. Cela nécessite le contrôle de la trame parent.
Dans votre iFrame, dites que vous voulez cette iframe: src = "http://www.example.com/mypage.php"
Eh bien, au lieu de HTML pour spécifier l'iframe, utilisez un javascript pour créer le HTML de votre iframe, obtenez l'url parent via javascript "au moment de la construction", et envoyez-la en tant que paramètre URL GET dans la chaîne de requête de votre cible src, comme alors:
Ensuite, trouvez-vous une fonction d'analyse d'url javascript qui analyse la chaîne d'url pour obtenir la variable d'url que vous recherchez, dans ce cas, c'est "url".
J'ai trouvé un excellent analyseur de chaînes d'URL ici: http://www.netlobo.com/url_query_string_javascript.html
la source
Si votre iframe provient d'un autre domaine (cross domain), vous devrez simplement utiliser ceci:
et - ici vous avez l'url principale!
la source
window.location.reload(true)
), cela ne fonctionne plus. Ensuite, le référent est l'URL de l'iframe lui-même.Pour les pages sur le même domaine et sous-domaine différent, vous pouvez définir la
document.domain
propriété via javascript.Le cadre parent et l'iframe doivent tous deux définir leur document.domain sur quelque chose qui est commun entre eux.
c'est-à
www.foo.mydomain.com
- dire etapi.foo.mydomain.com
chacun pourrait utiliser l'unfoo.mydomain.com
ou l' autre ou justemydomain.com
et être compatible (non, vous ne pouvez pas les définir tous les deuxcom
, pour des raisons de sécurité ...)notez également que document.domain est une rue à sens unique. Pensez à exécuter les trois instructions suivantes dans l'ordre:
Les navigateurs modernes peuvent également utiliser window.postMessage pour parler des origines, mais cela ne fonctionnera pas dans IE6. https://developer.mozilla.org/en/DOM/window.postMessage
la source
La ligne suivante fonctionnera:
document.location.ancestorOrigins[0]
celle-ci renvoie le nom de domaine ancêtre.la source
document.location.ancestorOrigins
revientundefined
pour moiEssayez-le:
Lorsque vous changez, vous êtes dans une iframe votre hôte est "référent".
la source
J'ai eu des problèmes avec ça. Si vous utilisez un langage comme php lorsque votre page se charge pour la première fois dans l'iframe
$_SERVER['HTTP_REFFERER']
et définissez-la sur une variable de session.De cette façon, lorsque la page se charge dans l'iframe, vous connaissez l'url parent complète et la chaîne de requête de la page qui l'a chargée. Avec la sécurité de plusieurs navigateurs, c'est un peu un casse-tête de compter sur window.parent si vous avez différents domaines.
la source
J'ai trouvé que l'exemple ci-dessus suggéré précédemment fonctionnait lorsque le script était exécuté dans une iframe, mais il n'a pas récupéré l'url lorsque le script était exécuté en dehors d'une iframe, un léger ajustement était nécessaire:
la source
Je n'ai pas pu faire fonctionner la solution précédente, mais j'ai découvert que si je définissais l'iframe scr avec par exemple,
http:otherdomain.com/page.htm?from=thisdomain.com/thisfolder
je pourrais, dans l'extrait d'iframe,thisdomain.com/thisfolder
en utilisant le javascript suivant:la source
Le problème avec PHP $ _SERVER ['HTTP_REFFERER'] est qu'il donne l'URL de page entièrement qualifiée de la page qui vous a amené à la page parente. Ce n'est pas la même chose que la page parent elle-même. Pire, parfois il n'y a pas de http_referer, car la personne a tapé l'url de la page parent. Donc, si j'arrive à votre page parent depuis yahoo.com, alors yahoo.com devient le http_referer, pas votre page.
la source
J'ai trouvé dans les cas où
$_SERVER['HTTP_REFERER']
ne fonctionne pas (je vous regarde, Safari),$_SERVER['REDIRECT_SCRIPT_URI']
a été une sauvegarde utile.la source
Dans Chrome, il est possible d'utiliser location.ancestorOrigins Il retournera toutes les URL parentes
la source
Je sais que le sien est super vieux, mais cela m'époustoufle, personne n'a recommandé de simplement passer des cookies d'un domaine à l'autre. Lorsque vous utilisez des sous-domaines, vous pouvez partager les cookies d'un domaine de base vers tous les sous-domaines simplement en définissant des cookies sur l'URL
.basedomain.com
Ensuite, vous pouvez partager toutes les données dont vous avez besoin via les cookies.
la source
Cela a fonctionné pour moi pour accéder à l'url src iframe.
la source
Obtenir toutes les fonctions Iframe parent et HTML
la source