Estamos usando o thickbox jQuery para exibir dinamicamente um iframe quando alguém clica em uma imagem. Nesse iframe, estamos usando a galleria uma biblioteca javascript para exibir várias imagens.
O problema parece ser que $(document).ready
no iframe parece ser acionado muito cedo e o conteúdo do iframe ainda nem foi carregado, portanto, o código da galeria não é aplicado corretamente nos elementos DOM. $(document).ready
parece usar o estado de pai pronto para iframe para decidir se o iframe está pronto.
Se extrairmos a função chamada pelo documento ready em uma função separada e a chamarmos após um tempo limite de 100 ms. Funciona, mas não podemos arriscar na produção com um computador lento.
$(document).ready(function() { setTimeout(ApplyGalleria, 100); });
Minha pergunta: qual evento jQuery devemos associar para poder executar nosso código quando o iframe dinâmico estiver pronto e não apenas um pai?
Respostas:
Respondi a uma pergunta semelhante (consulte o retorno de chamada do Javascript quando o IFRAME terminar de carregar? ). Você pode obter controle sobre o evento de carregamento iframe com o seguinte código:
Ao lidar com iframes, achei bom o suficiente para usar o evento load em vez do evento ready do documento.
fonte
.load()
evento foi descontinuado. Use em.on( "load", handler )
vez disso.Usando o jQuery 1.3.2, o seguinte funcionou para mim:
REVISÃO:! Na verdade, o código acima às vezes parece que funciona no Firefox, nunca parece que funciona no Opera.
Em vez disso, implementei uma solução de pesquisa para meus propósitos. Simplificado, fica assim:
Isso não requer código nas páginas iframe chamadas. Todo o código reside e é executado no quadro / janela pai.
fonte
setInterval
a pesquisa.Nos IFrames, normalmente resolvo esse problema colocando um pequeno script no final do bloco:
Este trabalho na maioria das vezes para mim. Às vezes, a solução mais simples e ingênua é a mais apropriada.
fonte
parent
uma cópia do jQuery e usarparent.$(document).ready(function(){ parent.IFrameLoaded( ); });
para inicializar o iframe.Seguindo a ideia de DrJokepu e David Murdoch, implementei uma versão mais completa. Ele exige jQuery sobre o pai eo iframe eo iframe para a sua controle.
código iframe:
código de teste dos pais:
fonte
Encontrou a solução para o problema.
Quando você clica em um link de caixa grossa que abre um iframe, ele insere um iframe com um ID de TB_iframeContent.
Em vez de confiar no
$(document).ready
evento no código iframe, só preciso vincular ao evento load do iframe no documento pai:Este código está no iframe, mas vincula a um evento de um controle no documento pai. Funciona no FireFox e no IE.
fonte
top.document
que me permite ter código dentro do iframe para saber quando o iframe foi carregado. (Emboraload
tenha sido preterido desde esta resposta, e deve ser substituídoon("load")
.)Basicamente, o que outros já postaram, mas IMHO é um pouco mais limpo:
fonte
Tente isso,
Tudo o que você precisa fazer é criar a função JavaScript testframe_loaded ().
fonte
Estou carregando o PDF com o jQuery ajax no cache do navegador. Em seguida, crio um elemento incorporado com os dados já no cache do navegador. Eu acho que também funcionará com iframe.
Você também deve definir corretamente os cabeçalhos http.
fonte
Esse foi exatamente o problema que encontrei com nosso cliente. Eu criei um pequeno plugin jquery que parece funcionar para a disponibilidade de iframe. Ele usa polling para verificar o documento iframe readyState combinado com o URL interno do documento combinado com a fonte iframe para garantir que o iframe esteja realmente "pronto".
O problema com "onload" é que você precisa acessar o iframe real que está sendo adicionado ao DOM; caso contrário, você deve tentar capturar o carregamento do iframe que, se estiver armazenado em cache, poderá não ser. O que eu precisava era de um script que pudesse ser chamado a qualquer momento e determinasse se o iframe estava ou não "pronto" ou não.
Aqui está a pergunta:
Santo Graal para determinar se o iframe local foi carregado ou não
e aqui está o problema que eu acabei inventando.
https://jsfiddle.net/q0smjkh5/10/
No jsfiddle acima, estou aguardando o onload anexar um iframe ao dom e, em seguida, verificando o estado pronto do documento interno do iframe - que deve ser de domínio cruzado porque está apontado para a wikipedia - mas o Chrome parece reportar "completo". O método incorreto do plug-in é chamado quando o iframe está pronto. O retorno de chamada tenta verificar o estado de prontidão do documento interno novamente - desta vez relatando uma solicitação entre domínios (que está correta) - de qualquer maneira parece funcionar para o que eu preciso e espero que ajude outras pessoas.
fonte
Essa função desta resposta é a melhor maneira de lidar com isso, pois
$.ready
falha explicitamente em iframes. Aqui está a decisão de não apoiar isso.O
load
evento também não dispara se o iframe já tiver sido carregado. Muito frustrante que isso continue sendo um problema em 2020!}
fonte