Existe uma maneira simples de obter o URL atual de um iframe?
O visualizador passaria por vários sites. Estou supondo que usaria algo em javascript.
Respostas:
Por motivos de segurança, você só pode obter o url enquanto o conteúdo do iframe e o javascript de referência forem veiculados no mesmo domínio. Enquanto isso for verdade, algo assim funcionará:
document.getElementById("iframe_id").contentWindow.location.href
Se os dois domínios forem incompatíveis, você encontrará restrições de segurança de script de referência entre sites.
Veja também as respostas a uma pergunta semelhante .
sandbox="allow-same-origin"
ao iframe?
Se o seu iframe for de outro domínio (vários domínios), as outras respostas não irão ajudá-lo ... você simplesmente precisará usar isto:
var currentUrl = document.referrer;
e - aqui você tem o url principal!
Espero que isso ajude de alguma forma, no seu caso, sofri exatamente com o mesmo problema e acabei de usar o localstorage para compartilhar os dados entre a janela pai e o iframe. Portanto, na janela principal, você pode:
localStorage.setItem("url", myUrl);
E no código em que a origem do iframe é apenas obter esses dados do armazenamento local:
localStorage.getItem('url');
Me economizou muito tempo. Pelo que posso ver, a única condição é o acesso ao código da página pai. Espero que isso ajude alguém.
Se você estiver no contexto iframe,
você poderia fazer
const currentIframeHref = new URL(document.location.href);
const urlOrigin = currentIframeHref.origin;
const urlFilePath = decodeURIComponent(currentIframeHref.pathname);
Se você estiver na janela / frame pai, poderá usar a resposta de https://stackoverflow.com/a/938195/2305243 , que é
document.getElementById("iframe_id").contentWindow.location.href
Tive um problema com hrefs de url de blob. Portanto, com uma referência ao iframe, acabei de produzir um url do atributo src do 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");
}
Algumas informações adicionais para qualquer pessoa que possa estar tendo problemas com isso:
Você receberá valores nulos se tentar obter o URL do iframe antes de carregá-lo. Resolvi esse problema criando todo o iframe em javascript e obtendo os valores de que precisava com a função 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);
Por causa da política de mesma origem, tive problemas ao acessar frames de "origem cruzada" - resolvi isso executando um servidor da Web localmente em vez de executar todos os arquivos diretamente do meu disco. Para que tudo isso funcione, você precisa acessar o iframe com o mesmo protocolo, nome de host e porta da origem. Não tenho certeza de qual desses estava / estava faltando ao executar todos os arquivos do meu disco.
Além disso, mais sobre objetos de localização: https://www.w3schools.com/JSREF/obj_location.asp