Accéder à l'URL parent de l'iframe

D'accord, j'ai une page sur et sur cette page, j'ai un iframe. Ce que je dois faire, c'est sur la page iframe, découvrez quelle est l'URL de la page principale.

J'ai cherché et je sais que cela n'est pas possible si ma page iframe est sur un domaine différent, car cela est un script entre sites. Mais, partout où j'ai lu, 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:

  • Cross Domain AJAX prétravail échouant Vérification d'origine
  • Le partage de ressources Cross-Origin (CORS) distingue-t-il HTTP et HTTPS?
  • Demande de CORS ne fonctionne pas dans Safari
  • Google Translate API - Aucun contrôle d'accès Origine avec texte à parole
  • Wikipedia API + demandes d'origine croisée
  • MediaElementAudioSource produit des zéros en raison des restrictions d'accès CORS
  • 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 la même information.

    De toute façon, alors 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.mysite.com/pageA.html

    Et puis mon URL iframe est

    Http: // qa-www.mysite.com/pageB.html

    Lorsque j'essaie de saisir l'URL à partir de pageB.html (la page iframe), je continue d'avoir la même erreur d'accès refusé. Il semble donc que même les sous-domaines comptent comme scripts entre sites, est-ce correct, ou est-ce que je fais quelque chose de mal?

  • Javascript: les données peuvent-elles être transmises bidirectionnellement via un iframe?
  • Javascript - Obtenez un élément dans un iFrame
  • Lier aux événements dans l'iframe créé dynamiquement
  • Comment forcer un iFrame à recharger une fois qu'il est chargé
  • Comment définir un attribut src iframe à partir d'une variable dans AngularJS
  • Comment puis-je implémenter l'accès URL de Cross Domain à partir d'un Iframe en utilisant Javascript?
  • 11 Solutions collect form web for “Accéder à l'URL parent de l'iframe”

    Tu as raison. Les sous-domaines sont toujours considérés comme des domaines distincts lors de l'utilisation d'iframes. Il est possible de transmettre des messages à l'aide de postMessage(...) , mais d'autres API JS sont intentionnellement inaccessibles.

    Il est également possible d'obtenir l'URL en fonction du contexte. Voir d'autres réponses pour plus de détails.

    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 domaine (sous). Toutefois, si vous avez juste besoin de l'URL de la page principale (c'est-à-dire l'URL du navigateur), vous pouvez l'essayer:

     var url = (window.location != window.parent.location) ? document.referrer : document.location.href; 

    Je luttais avec le même problème et obtenais cette solution d'une autre source. J'ai travaillé pour moi.

    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. Il nécessite le contrôle du cadre parent.

    Dans votre iFrame, vous dites que vous voulez cet 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 pour votre iframe, obtenir l'URL parent par javascript "au moment de la construction" et l'envoyer comme un paramètre url GET dans la chaîne de requête de votre cible src, comme alors:

     <script type="text/javascript"> url = parent.document.URL; document.write('<iframe src="http://example.com/mydata/page.php?url=' + url + '"></iframe>'); </script> 

    Ensuite, trouvez-vous une fonction d'analyse d'URL de javascript qui analyse la chaîne url pour obtenir la variable url que vous recherchez, dans ce cas, c'est "url".

    J'ai trouvé un excellent analyseur de chaîne url ici: http://www.netlobo.com/url_query_string_javascript.html

    Si votre iframe provient d'un autre domaine, (domaine transversal), vous devrez simplement utiliser ceci:

     var currentUrl = document.referrer; 

    Et – ici, vous avez l'URL principale!

    Pour les pages du même domaine et du sous-domaine différent, vous pouvez définir la propriété document.domain via javascript.

    Le cadre parent et l'iframe doivent définir leur document.domaine à un élément commun entre ceux-ci.

    C'est-à-dire www.foo.mydomain.com et api.foo.mydomain.com pourraient chacun utiliser foo.mydomain.com ou tout simplement mydomain.com et être compatible (non, vous ne pouvez pas les configurer à la fois pour des raisons de sécurité. …)

    Notez également que document.domain est une voie à sens unique. Envisagez d'exécuter les trois instructions suivantes dans l'ordre:

     // assume we're starting at www.foo.mydomain.com document.domain = "foo.mydomain.com" // works document.domain = "mydomain.com" // works document.domain = "foo.mydomain.com" // throws a security exception 

    Les navigateurs modernes peuvent également utiliser window.postMessage pour parler à travers les origines, mais cela ne fonctionnera pas dans IE6. https://developer.mozilla.org/fr/DOM/window.postMessage

     var url = (window.location != window.parent.location) ? document.referrer: document.location; 

    J'ai trouvé que l'exemple ci-dessus suggéré précédemment travaillé lorsque le script a été exécuté dans un iframe mais il n'a pas récupéré l'URL lorsque le script a été exécuté en dehors d'un iframe, un léger réglage était nécessaire:

     var url = (window.location != window.parent.location) ? document.referrer: document.location.href; 

    J'ai eu des problèmes avec cela. Si vous utilisez une langue comme php lorsque votre page se charge d'abord dans l'iframe, saisissez $_SERVER['HTTP_REFFERER'] et définissez-le sur une variable de session.

    De cette façon, lorsque la page se charge dans l'iframe, vous connaissez l'URL complète de votre parent et la chaîne de requête de la page qui l'a chargée. Avec la sécurité du navigateur croisé, c'est un peu un mal de tête en comptant sur window.parent n'importe quoi si vous vous les différents domaines.

    Je ne pouvais pas obtenir une solution précédente au travail, mais j'ai découvert que si j'ai configuré le iframe avec par exemple http:otherdomain.com/page.htm?from=thisdomain.com/thisfolder je pourrais, dans l'iframe extraire thisdomain.com/thisfolder en utilisant le javascript suivant:

     var myString = document.location.toString(); var mySplitResult = myString.split("="); fromString = mySplitResult[1]; 

    Le problème avec PHP $ _SERVER ['HTTP_REFFERER'] est qu'il donne l'URL de la page entièrement qualifiée de la page qui vous a amené à la page parentale. Ce n'est pas la même chose que la page parent, elle-même. Pire encore, il n'y a pas de http_referer, car la personne a saisi l'URL de la page parentale. Donc, si je parviens à votre page parent de yahoo.com, alors yahoo.com devient http_referer, pas votre page.

    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.

    Sans toucher le code de la fenêtre principale uniquement à partir d'iframe, vous ne pouvez pas accéder au contenu ou à l'URL de la fenêtre principale. Fenêtre principale .html Iframe.html Si vous souhaitez écrire uniquement un codage dans iframe. U ne peut pas obtenir du contenu de mainwindow.html

    JavaScript rend le site Web intelligent, beauté et facile à utiliser.