Gostaria de recarregar um <iframe>
usando JavaScript. A melhor maneira que encontrei até agora foi definir o src
atributo do iframe , mas isso não é muito limpo. Alguma ideia?
javascript
iframe
caffo
fonte
fonte
src
atributo não é limpa? Parece ser a única solução que funciona em todos os navegadores e em vários domíniossrc
atributo para si mesmo causa problemas se você tiver um link em outro lugar que tenha como alvo o<iframe>
. Em seguida, o quadro mostrará a página inicial como originalmente projetada.Respostas:
tenha cuidado, no Firefox,
window.frames[]
não pode ser indexado por ID, mas por nome ou índicefonte
frames[1].location.href.reload()
ewindow.frames['some_frame_id'].location.href.reload()
também pode ser usadoEle recarregará
iframe
, mesmo entre domínios! Testado com IE7 / 8, Firefox e Chrome.fonte
document.getElementById('iframeid').src += '';
também funciona: jsfiddle.net/Daniel_Hug/dWm5kreload
mas isso é permitido.http://example.com/#something
), isso não recarregará o quadro. Eu usei a abordagem de adicionar um parâmetro de consulta descartável como?v2
a URL antes do hash.Se você estiver usando jQuery, isso parece funcionar:
Espero que não seja muito feio para o stackoverflow.
fonte
var iframe = document.getElementById("your_iframe"); iframe.src = src;
var iframe = document.getElementById("your_iframe"); iframe.src = iframe.src;
Adicionar espaço vazio também recarrega o iFrame automaticamente.
fonte
fonte
Por causa da mesma política de origem , isso não funcionará ao modificar um iframe apontando para um domínio diferente. Se você pode direcionar navegadores mais novos, considere usar as mensagens entre documentos do HTML5 . Você visualiza os navegadores que suportam esse recurso aqui: http://caniuse.com/#feat=x-doc-messaging .
Se você não pode usar a funcionalidade HTML5, siga os truques descritos aqui: http://softwareas.com/cross-domain-communication-with-iframes . Essa entrada do blog também faz um bom trabalho ao definir o problema.
fonte
Acabei de me deparar com isso no chrome e a única coisa que funcionou foi remover e substituir o iframe. Exemplo:
Muito simples, não abordado nas outras respostas.
fonte
para novo URL
O método assign () carrega um novo documento.
recarregar
O método reload () é usado para recarregar o documento atual.
fonte
Simplesmente substituir o
src
atributo do elemento iframe não era satisfatório no meu caso, porque seria possível ver o conteúdo antigo até a nova página ser carregada. Isso funciona melhor se você deseja fornecer feedback visual instantâneo:fonte
Um refinamento na postagem de yajra ... Eu gosto do pensamento, mas odeio a idéia de detecção de navegador.
Eu prefiro a visão do ppk de usar a detecção de objetos em vez da detecção do navegador ( http://www.quirksmode.org/js/support.html ), porque você está realmente testando os recursos do navegador e agindo de acordo, em vez de do que você acha que o navegador é capaz naquele momento. Também não requer tanta análise feia de IDs de navegador, nem exclui navegadores perfeitamente capazes dos quais você não conhece nada.
Então, em vez de olhar para navigator.AppName, por que não fazer algo assim, testando os elementos que você usa? (Você pode usar os blocos try {} se quiser ficar ainda mais elegante, mas isso funcionou para mim.)
Dessa forma, você pode tentar quantas permutações diferentes quiser ou sem precisar causar erros de javascript e fazer algo sensato se tudo mais falhar. É um pouco mais trabalhoso testar seus objetos antes de usá-los, mas, o IMO cria códigos melhores e mais seguros.
Trabalhei para mim no IE8, Firefox (15.0.1), Chrome (21.0.1180.89 m) e Opera (12.0.2) no Windows.
Talvez eu pudesse me sair ainda melhor testando a função recarregar, mas isso é o suficiente para mim agora. :)
fonte
Agora, para fazer isso funcionar no chrome 66, tente o seguinte:
fonte
No IE8, usando .Net, definir
iframe.src
pela primeira vez é aceitável, mas definiriframe.src
pela segunda vez não aumenta apage_load
página iframed. Para resolvê-lo eu useiiframe.contentDocument.location.href = "NewUrl.htm"
.Descubra-o quando usado o jQuery thickBox e tente reabrir a mesma página no iframe do thickbox. Em seguida, apenas mostrou a página anterior que foi aberta.
fonte
Use recarregar para o IE e defina src para outros navegadores. (recarregar não funciona no FF) testado no IE 7,8,9 e Firefox
fonte
Se você estiver usando o Jquery, haverá um código de linha.
e se você estiver trabalhando com o mesmo pai, então
fonte
Se todas as opções acima não funcionarem para você:
Por algum motivo, isso atualizou meu iframe em vez de todo o script. Talvez porque seja colocado no próprio quadro, enquanto todas as soluções getElemntById funcionam quando você tenta atualizar um quadro de outro quadro?
Ou eu não entendo isso completamente e falo sem sentido, de qualquer maneira isso funcionou para mim como um encanto :)
fonte
Você considerou anexar ao URL um parâmetro de string de consulta sem sentido?
Ele não será visto e, se você souber que o parâmetro é seguro, deve estar correto.
fonte
Outra solução.
fonte
var url = ifr.src; ifr.src = null; ifr.src = url;
Usar
self.location.reload()
recarregará o iframe.fonte
fonte
Se você tentou todas as outras sugestões e não conseguiu que nenhuma delas funcionasse (como eu não consegui), aqui está algo que você pode tentar que pode ser útil.
HTML
JS
Inicialmente, decidi tentar economizar algum tempo com o RWD e os testes entre navegadores. Eu queria criar uma página rápida que abrigasse um monte de iframes, organizados em grupos que eu mostraria / ocultaria à vontade. Logicamente, você deseja atualizar com facilidade e rapidez qualquer quadro.
Devo observar que o projeto no qual estou trabalhando atualmente, aquele em uso neste banco de ensaios, é um site de uma página com locais indexados (por exemplo, index.html # home). Isso pode ter algo a ver com o motivo pelo qual não consegui obter nenhuma das outras soluções para atualizar meu quadro específico.
Dito isto, sei que não é a coisa mais limpa do mundo, mas funciona para meus propósitos. Espero que isso ajude alguém. Agora, se eu conseguisse descobrir como impedir o iframe de rolar a página pai toda vez que houver animação dentro do iframe ...
Edição: percebi que isso não "atualiza" o iframe como eu esperava que fosse. Ele recarregará a fonte inicial do iframe. Ainda não consigo descobrir por que não consegui fazer funcionar nenhuma das outras opções.
ATUALIZAÇÃO: O motivo pelo qual não consegui usar nenhum dos outros métodos funcionou é porque os estava testando no Chrome, e o Chrome não permitirá que você acesse o conteúdo de um iframe (Explicação: É provável que versões futuras do Chrome suportem o conteúdo / contentDocument quando o iFrame carrega um arquivo html local a partir do arquivo html local? ) se ele não se originar do mesmo local (até onde eu entendi). Após testes adicionais, também não consigo acessar o contentWindow no FF.
JS ALTERADO
fonte
Para fins de depuração, é possível abrir o console, alterar o contexto de execução para o quadro que ele deseja atualizar e executar
document.location.reload()
fonte