Tentei algumas soluções, mas não tive sucesso. Estou me perguntando se existe uma solução por aí, de preferência com um tutorial fácil de seguir.
iframe
cross-domain
J82
fonte
fonte
Respostas:
Você tem três alternativas:
1. Use o redimensionador de iFrame
Esta é uma biblioteca simples para manter os iFrames dimensionados de acordo com seu conteúdo. Ele usa as APIs PostMessage e MutationObserver, com fallback para o IE8-10. Ele também tem opções para a página de conteúdo solicitar que o iframe contido tenha um determinado tamanho e também pode fechar o iframe quando terminar de usá-lo.
https://github.com/davidjbradshaw/iframe-resizer
2. Use Easy XDM (combinação PostMessage + Flash)
O Easy XDM usa uma coleção de truques para permitir a comunicação entre domínios diferentes em vários navegadores e há exemplos de como usá-lo para redimensionar o iframe:
http://easyxdm.net/wp/2010/03/17/resize-iframe-based-on-content/
http://kinsey.no/blog/index.php/2010/02/19/resizing-iframes-using-easyxdm/
O Easy XDM funciona usando PostMessage em navegadores modernos e uma solução baseada em Flash como alternativa para navegadores mais antigos.
Veja também este tópico sobre Stackoverflow (também há outros, esta é uma pergunta comum). Além disso, o Facebook parece usar uma abordagem semelhante .
3. Comunique-se por meio de um servidor
Outra opção seria enviar a altura do iframe para o seu servidor e, em seguida, pesquisar desse servidor a partir da página da web pai com JSONP (ou usar uma longa pesquisa, se possível).
fonte
Eu tenho a solução para definir a altura do iframe dinamicamente com base em seu conteúdo. Isso funciona para o conteúdo de domínio cruzado. Existem alguns passos a seguir para o conseguir.
Suponha que você tenha adicionado iframe na página da web "abc.com/page"
<div> <iframe id="IframeId" src="http://xyz.pqr/contactpage" style="width:100%;" onload="setIframeHeight(this)"></iframe> </div>
Em seguida, você deve vincular o evento de "mensagem" do Windows à página da web "abc.com/page"
No carregamento do iframe, você deve enviar uma mensagem para o conteúdo da janela do iframe com a mensagem "FrameHeight":
fonte
O que fiz foi comparar o iframe scrollWidth até que ele mudasse de tamanho enquanto eu configurava incrementalmente a altura do IFrame. E funcionou bem para mim. Você pode ajustar o incremento para o que desejar.
fonte
Eu tenho um script que cai no iframe com seu conteúdo. Ele também garante que iFrameResizer existe (ele o injeta como um script) e, em seguida, faz o redimensionamento.
Vou apresentar um exemplo simplificado abaixo.
Então, o conteúdo do iframe pode ser injetado em qualquer lugar dentro de outra página / site usando o script como:
O conteúdo do iframe será injetado abaixo de onde quer que você coloque a tag do script.
Espero que isto seja útil para alguém. 👍
fonte
<script ... data-src="http://google.com">
e preenchi o iframe src com ele.[email protected]
Aqui está minha solução simples nesta página. http://lab.ohshiftlabs.com/iframesize/
É assim que funciona;
Basicamente, se você pode editar a página em outro domínio, você pode colocar outra página iframe que pertence ao seu servidor que economiza altura para cookies. Com um intervalo de leitura de cookies quando ele é atualizado, atualize a altura do iframe. Isso é tudo.
Baixar; http://lab.ohshiftlabs.com/iframesize/iframesizepost.zip
Editar: dezembro de 2019
A solução acima usa basicamente outro iframe dentro de um iframe. O terceiro iframe pertence ao domínio da página superior, que você chama esta página com uma string de consulta que salva o valor do tamanho em um cookie, a página externa verifica essa consulta com algum intervalo. Mas não é uma boa solução, então você deve seguir esta:
Na página inicial:
Aqui você pode verificar
m.origin
de onde vem.Página na moldura:
Embora, por favor, não se esqueça de que essa não é uma maneira tão segura. Para torná-lo seguro, atualize o valor * (targetOrigin) com o valor desejado. Siga a documentação: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
fonte
Eu encontrei outra solução do lado do servidor para desenvolvimento web usando PHP para obter o tamanho de um iframe.
Primeiro, use o script de servidor PHP para uma chamada externa via função interna: (como um
file_get_contents
with, mas curl e dom).Você precisa exibir sob div (
iframe_reserve
) o html gerado pela chamada de função usando um simplesecho curl_get_file_contents("location url iframe","activation proxy")
Depois de fazer isso, uma função de evento de corpo onload com javascript toma a altura do iframe da página apenas com um simples controle do conteúdo div (
iframe_reserve
)Então, eu costumava
divHeight = document.getElementById("iframe_reserve").clientHeight;
obter a altura da página externa que vamos chamar depois de mascarar o contêiner div (iframe_reserve
). Depois disso, carregamos o iframe com sua altura boa, só isso.fonte
Encontrei esse problema enquanto trabalhava em algo no trabalho (usando o React). Basicamente, temos algum conteúdo html externo que salvamos em nossa tabela de documentos no banco de dados e, em seguida, inserimos na página em certas circunstâncias quando você está no conjunto de dados Documentos.
Portanto, dados
n
inlines, dos quais atén
poderiam conter html externo, precisávamos criar um sistema para redimensionar automaticamente o iframe de cada inline assim que o conteúdo fosse totalmente carregado em cada um. Depois de girar minhas rodas um pouco, foi assim que acabei fazendo isso:message
ouvinte de evento no índice de nosso aplicativo React que verifica se há uma chave específica que definiremos no iframe do remetente.<script>
tag que aguardará owindow.onload
disparo dos iframes . Assim que disparar, usamospostMessage
para enviar uma mensagem para a janela pai com informações sobre o id do iframe, altura computada, etc.id
do iframe que passamos noMessageEvent
objetoiframe
, basta definir a altura a partir do valor que é passado do iframepostMessage
.fonte