Existe-t-il un moyen simple d'obtenir l'URL actuelle à partir d'une iframe?
Le spectateur passerait par plusieurs sites. Je suppose que j'utiliserais quelque chose en javascript.
javascript
url
iframe
Chris
la source
la source
Réponses:
Pour des raisons de sécurité, vous ne pouvez obtenir l'URL que tant que le contenu de l'iframe et le javascript de référence sont servis à partir du même domaine. Tant que cela est vrai, quelque chose comme ça fonctionnera:
document.getElementById("iframe_id").contentWindow.location.href
Si les deux domaines ne correspondent pas, vous rencontrerez des restrictions de sécurité de script de référence intersite.
Voir également les réponses à une question similaire .
la source
sandbox="allow-same-origin"
à l'iFrame?Si votre iframe provient d'un autre domaine, (cross domain), les autres réponses ne vous aideront pas ... vous devrez simplement utiliser ceci:
var currentUrl = document.referrer;
et - ici vous avez l'url principale!
la source
J'espère que cela vous aidera dans votre cas, j'ai souffert du même problème et j'ai simplement utilisé localstorage pour partager les données entre la fenêtre parent et l'iframe. Ainsi, dans la fenêtre parent, vous pouvez:
localStorage.setItem("url", myUrl);
Et dans le code où la source iframe est simplement obtenir ces données de localstorage:
localStorage.getItem('url');
Cela m'a fait gagner beaucoup de temps. Pour autant que je puisse voir, la seule condition est l'accès au code de la page parent. J'espère que cela aidera quelqu'un.
la source
Si vous êtes dans le contexte iframe,
vous pourriez faire
const currentIframeHref = new URL(document.location.href); const urlOrigin = currentIframeHref.origin; const urlFilePath = decodeURIComponent(currentIframeHref.pathname);
Si vous êtes dans la fenêtre / le cadre parent, vous pouvez utiliser la réponse de https://stackoverflow.com/a/938195/2305243 , qui est
document.getElementById("iframe_id").contentWindow.location.href
la source
J'ai eu un problème avec les hrefs d'URL blob. Donc, avec une référence à l'iframe, je viens de produire une URL à partir de l'attribut src de l'iframe:
const iframeReference = document.getElementById("iframe_id"); const iframeUrl = iframeReference ? new URL(iframeReference.src) : undefined; if (iframeUrl) { console.log("Voila: " + iframeUrl); } else { console.warn("iframe with id iframe_id not found"); }
la source
Quelques informations supplémentaires pour tous ceux qui pourraient avoir des problèmes avec cela:
Vous obtiendrez des valeurs nulles si vous essayez d'obtenir l'URL de l'iframe avant son chargement. J'ai résolu ce problème en créant l'ensemble de l'iframe en javascript et en obtenant les valeurs dont j'avais besoin avec la fonction onLoad:
var iframe = document.createElement('iframe'); iframe.onload = function() { //some custom settings this.width=screen.width;this.height=screen.height; this.passing=0; this.frameBorder="0"; var href = iframe.contentWindow.location.href; var origin = iframe.contentWindow.location.origin; var url = iframe.contentWindow.location.url; var path = iframe.contentWindow.location.pathname; console.log("href: ", href) console.log("origin: ", origin) console.log("path: ", path) console.log("url: ", url) }; iframe.src = 'http://localhost/folder/index.html'; document.body.appendChild(iframe);
En raison de la politique de même origine, j'ai eu des problèmes lors de l'accès aux cadres "cross origin" - j'ai résolu cela en exécutant un serveur Web localement au lieu d'exécuter tous les fichiers directement à partir de mon disque. Pour que tout cela fonctionne, vous devez accéder à l'iframe avec le même protocole, nom d'hôte et port que l'origine. Je ne sais pas lequel de ces éléments était / manquait lors de l'exécution de tous les fichiers à partir de mon disque.
En outre, plus d'informations sur les objets de localisation: https://www.w3schools.com/JSREF/obj_location.asp
la source
Si vous êtes à l'intérieur d'un iframe qui n'a pas de cross domain src, ou src est vide:
Ensuite:
function getOriginUrl() { var href = document.location.href; var referrer = document.referrer; // Check if window.frameElement not null if(window.frameElement) { href = window.frameElement.ownerDocument.location.href; // This one will be origin if(window.frameElement.ownerDocument.referrer != "") { referrer = window.frameElement.ownerDocument.referrer; } } // Compare if href not equal to referrer if(href != referrer) { // Take referrer as origin return referrer; } else { // Take href return href } }
Si vous êtes dans un iframe avec cross domain src:
Ensuite:
function getOriginUrl() { var href = document.location.href; var referrer = document.referrer; // Detect if you're inside an iframe if(window.parent != window) { // Take referrer as origin return referrer; } else { // Take href return href; } }
la source