Como faço para implementar o access a URLs entre domínios a partir de um iframe usando JavaScript?

Preciso acessar o URL do domínio pai do meu iframe, que está em outro domínio.

Por exemplo, “example.com” é o meu website que possui um iframe de outro domínio pai, como “google.com”. Aqui, preciso acessar o URL do domínio pai do meu exemplo.com. Ou seja, preciso obter o URL “google.com” no meu domínio “example.com”. Além disso, o domínio pai não pode ser codificado.

O que eu tentei foi usar o seguinte código:

window.parent.location.href() 

mas isso resulta em erro de access negado. Como faço para implementar isso corretamente para conseguir isso?

Você pode tentar verificar o referenciador, que deve ser o site pai, se você for um iframe

você pode fazer isso assim:

 var href = document.referrer; 

Você pode querer dar uma olhada nessas perguntas / respostas; eles poderiam lhe dar algumas informações sobre o seu problema:

  • access de domínio cruzado no iframe de filho para pai
  • javascript acessa DOM pai entre domínios?
  • Como acessar o pai Iframe de javascript

Para simplificar: não é possível acessar o iframe de outro domínio, por motivos de segurança – o que explica a mensagem de erro que você está recebendo.

A página da mesma política de origem na wikipedia traz algumas informações sobre essa medida de segurança:

Em suma, a política permite que scripts executados em páginas originárias do mesmo site acessem os methods e propriedades uns dos outros sem restrições específicas – mas impede o access à maioria dos methods e propriedades em páginas de sites diferentes.

Uma separação rigorosa entre o conteúdo fornecido por sites não relacionados deve ser mantida no lado do cliente para evitar a perda de confidencialidade ou integridade dos dados.

Em vez de usar o referenciador, você pode implementar window.postMessage para se comunicar entre os iframes / windows em todos os domínios.
Você publica em window.parent e, em seguida, o pai retorna o URL.
Isso funciona, mas requer comunicação assíncrona.
Você precisará gravar um wrapper síncrono em torno dos methods asynchronouss, se precisar dele síncrono.

           

Child.htm

          

Test

Você tem algumas opções:

  1. Escopo do domínio para baixo (ver document.domain) na página que contém e no iframe para a mesma coisa. Então eles não serão limitados por restrições de “mesma origem”.

  2. Use postMessage, que é suportado por todos os navegadores HTML5 para comunicação cross-domain .

Bom artigo aqui: comunicação entre domínios com iframes

Além disso, você pode definir diretamente o document.domain o mesmo em ambos os frameworks (mesmo

 document.domain = document.domain; 

código tem sentido porque redefine a porta para null), mas esse truque não é de propósito geral.

experimentar

 window.frameElement.ownerDocument.domain