Estou carregando uma página da web aspx em um iframe. O conteúdo do Iframe pode ter mais altura que a altura do iframe. O iframe não deve ter barras de rolagem.
Eu tenho uma div
tag wrapper dentro do iframe, que basicamente é todo o conteúdo. Eu escrevi alguns jQuery para fazer o redimensionamento acontecer:
$("#TB_window", window.parent.document).height($("body").height() + 50);
onde
TB_window
é a div na qual Iframe
está contida.
body
- a etiqueta do corpo do aspx no iframe.
Este script está anexado ao conteúdo do iframe. Estou recebendo o TB_window
elemento da página pai. Enquanto isso funciona bem no Chrome, mas o TB_window entra em colapso no Firefox. Estou realmente confuso / perdido por que isso acontece.
javascript
jquery
asp.net
iframe
karry
fonte
fonte
Respostas:
Você pode recuperar a altura do
IFRAME
conteúdo usando:contentWindow.document.body.scrollHeight
Após o
IFRAME
carregamento, você pode alterar a altura fazendo o seguinte:Em seguida, na
IFRAME
tag, você conecta o manipulador da seguinte maneira:Eu tinha uma situação há um tempo atrás, onde eu também precisava chamar
iframeLoaded
a partir daIFRAME
própria depois de um formulário de submissão ocorreu dentro. Você pode fazer isso fazendo o seguinte nosIFRAME
scripts de conteúdo:fonte
X-FRAME-OPTIONS
adicionar uma linha como:Response.AddHeader("X-FRAME-OPTIONS", "SAMEORIGIN");
ouresponse.addHeader("X-FRAME-OPTIONS", "Allow-From https://some.othersite.com");
iFrameID.height = "";
paraiFrameID.height = "20px";
. A altura padrão do iframe do navegador é 150px, e é para isso que""
ela é redefinida.Uma resposta ligeiramente melhorada para Aristos ...
Em seguida, declare no seu iframe da seguinte maneira:
Existem duas pequenas melhorias:
iframe.height = ""
se você vai redesigná-lo na próxima declaração. Fazer isso gera uma sobrecarga, pois você está lidando com um elemento DOM.Editar: se o conteúdo do quadro estiver sempre mudando, chame:
de dentro do iframe após a atualização. Trabalhos para a mesma origem.
Ou para detectar automaticamente:
fonte
function resizeIframe(iframe) { var size=iframe.contentWindow.document.body.scrollHeight; var size_new=size+20; iframe.height = size_new + "px"; }
Descobri que a resposta aceita não era suficiente, pois X-FRAME-OPTIONS: Allow-From não é suportado no safari ou no chrome . Em vez disso, adotamos uma abordagem diferente, encontrada em uma apresentação de Ben Vinegar, da Disqus. A idéia é adicionar um ouvinte de evento à janela pai e, dentro do iframe, use window.postMessage para enviar um evento ao pai solicitando que ele faça alguma coisa (redimensione o iframe).
Portanto, no documento pai, adicione um ouvinte de evento:
E dentro do iframe, escreva uma função para postar a mensagem:
Por fim, dentro do iframe, adicione um onLoad à tag body para disparar a função redimensionar:
fonte
setInterval(resize, 1000);
Adicione isso ao iframe, isso funcionou para mim:
E se você usa o jQuery, tente este código:
fonte
Você pode ver quatro propriedades diferentes para obter a altura do conteúdo em um iFrame.
Infelizmente, todos eles podem dar respostas diferentes e estas são inconsistentes entre os navegadores. Se você definir a margem do corpo como 0, a
document.body.offsetHeight
resposta será a melhor. Para obter o valor correto, tente esta função; que é extraído da biblioteca iframe-redizer , que também cuida de manter o iFrame do tamanho correto quando o conteúdo é alterado ou o navegador é redimensionado.fonte
Outras respostas não estavam funcionando para mim, então eu fiz algumas alterações. Espero que isso ajude
fonte
Em vez de usar javscript / jquery, a maneira mais fácil que encontrei é:
Aqui 1vh = 1% da altura da janela do navegador. Portanto, o valor teórico da altura a ser definida é 100vh, mas praticamente 98vh fez a mágica.
fonte
Caso isso ajude alguém. Eu estava puxando meu cabelo tentando fazer isso funcionar, então notei que o iframe tinha uma entrada na classe com altura: 100%. Quando eu removi isso, tudo funcionou como esperado. Portanto, verifique se há conflitos de CSS.
fonte
você também pode adicionar requestAnimationFrame repetido ao seu resizeIframe (por exemplo, da resposta do @ BlueFish), que sempre seria chamado antes do navegador pintar o layout e você poderia atualizar a altura do iframe quando seu conteúdo mudasse de altura. por exemplo, formulários de entrada, conteúdo carregado lento etc.
seu retorno de chamada deve ser rápido o suficiente para não causar grande impacto em seu desempenho geral
fonte
Uncaught TypeError: Cannot read property 'scrollHeight' of null
poisbody
énull
, no entanto, funciona normalmente.Você pode consultar a pergunta relacionada aqui - Como tornar a largura e a altura do iframe iguais à sua div pai?
Para definir a altura dinâmica -
E códigos - https://gist.github.com/mohandere/a2e67971858ee2c3999d62e3843889a8
fonte
Estou usando jQuery e o código abaixo está funcionando para mim,
fonte
Eu encontrei a resposta de Troy não funcionou. Este é o mesmo código reformulado para o ajax:
fonte
Para adicionar ao pedaço de janela que parece cortado na parte inferior, especialmente quando você não tem rolagem, usei:
fonte
Essa é útil quando você precisa de uma solução sem jquery. Nesse caso, você deve tentar adicionar um contêiner e definir um preenchimento para ele em porcentagens
Código de exemplo HTML:
Código de exemplo CSS:
fonte
A solução simples é medir a largura e a altura da área de conteúdo e, em seguida, usar essas medidas para calcular a porcentagem de preenchimento inferior.
Nesse caso, as medidas são 1680 x 720 px; portanto, o preenchimento na parte inferior é 720/1680 = 0,43 * 100, o que resulta em 43%.
fonte
Uma resposta ligeiramente melhorada para o BlueFish ...
Isso leva em consideração a altura da tela do Windows (navegador, telefone), que é boa para design responsivo e iframes que têm uma altura enorme. Preenchimento representa o preenchimento que você deseja acima e abaixo do iframe, no caso de passar pela tela inteira.
fonte
fonte
Exemplo usando PHP htmlspecialchars () + verifique se a altura existe e é> 0:
fonte
basta posicionar o contêiner iframe: absoluto e o iframe alterará automaticamente sua altura de acordo com seu conteúdo
fonte
e / ou
Consulte a pergunta Estouro de pilha Como obter a altura de um elemento do corpo .
Tente isso para encontrar a altura do corpo no jQuery:
Não tem um valor se o Firebug . Talvez seja esse o problema.
fonte