Como atualizar um IFrame usando Javascript?

Respostas:

152
var iframe = document.getElementById('youriframe');
iframe.src = iframe.src;
kjagiello
fonte
2
Funciona para mim nesta versão do Chrome:Version 24.0.1312.56 Ubuntu 12.04 (24.0.1312.56-0ubuntu0.12.04.1)
Paul A Jungwirth
3
Para sua informação - há atualmente (em janeiro de 2013) um bug do projeto Chromium ( code.google.com/p/chromium/issues/detail?id=172859 ) que faz com que atualizações de iframe sejam adicionadas ao histórico do documento.
Robert Altman,
Se em iFrame mudar de página, este método perde a navegação
Eduardo Cuomo
10
var tmp_src = iframe.src; iframe.src = ''; iframe.src = tmp_src;
lyfing
2
Isso funciona perfeitamente para mim no Chromedocument.getElementById('frame_id').contentDocument.location.reload(true);
Haseeb Zulfiqar
104

Isso deve ajudar:

document.getElementById('FrameID').contentWindow.location.reload(true);

EDIT: Corrigido o nome do objeto de acordo com o comentário de @Joro.

nfechner
fonte
3
Isso não está funcionando no IE9. Você deve usar contentWindow em vez de contentDocument.
gotqn
1
Obrigado pela resposta. Além disso, se você deve causar positivamente uma atualização de outra página para outra dentro do iframe, em vez de reload(true)usar isto:document.getElementById('FrameID').contentWindow.location.replace(new_url);
racl101
15
Isso não funciona com iframes com origens diferentes (protocolo, nome de host ou porta).
michelpm
18

desde que o iframe seja carregado do mesmo domínio, você pode fazer isso, o que faz um pouco mais de sentido:

iframe.contentWindow.location.reload();
Horia Dragomir
fonte
7

Funciona para IE, Mozzila, Chrome

document.getElementById('YOUR IFRAME').contentDocument.location.reload(true);
Marek Pavelek
fonte
4

Você pode usar este método simples

function reloadFrame(iFrame) {

    iFrame.parentNode.replaceChild(iFrame.cloneNode(), iFrame);

}
Vasile Alexandru Peste
fonte
2

Peguei isso daqui

var f = document.getElementById('iframe1');
f.src = f.src;
Amarghosh
fonte
Se em iFrame mudar de página, este método perdeu a navegação
Eduardo Cuomo
2

2017:

Se estiver no mesmo domínio:

iframe.contentWindow.location.reload();

vai funcionar.

Pery Mimon
fonte
1

Aqui está o snippet de HTML:

<td><iframe name="idFrame" id="idFrame" src="chat.txt" width="468" height="300"></iframe></td>

E meu código Javascript:

window.onload = function(){
setInterval(function(){
    parent.frames['idFrame'].location.href = "chat.txt";
},1000);}
Tony
fonte
1

Redefinindo o atributo src diretamente:

iframe.src = iframe.src;

Redefinindo o src com um carimbo de data / hora para invalidação de cache:

iframe.src =  iframe.src.split("?")[0] + "?_=" + new Date().getTime();

Limpando o src quando a opção de strings de consulta não for possível (URI de dados):

var wasSrc = iframe.src

iframe.onload = function() {
    iframe.onload = undefined;
    iframe.src = wasSrc;
}
lcharbon
fonte
1

Se você usar caminhos hash (como mywebsite.com/#/my/url), que podem não atualizar os frames ao alternar o hash:

<script>
    window.onhashchange = function () {
        window.setTimeout(function () {
            let frame = document.getElementById('myFrame');
            if (frame !== null) {frame.replaceWith(frame);}
        }, 1000);
    }
</script>

Infelizmente, se você não usar o tempo limite, o JS pode tentar substituir o quadro antes que a página termine de carregar o conteúdo (carregando, assim, o conteúdo antigo). Não tenho certeza da solução alternativa ainda.

NotoriousPyro
fonte
0

Se você tiver vários iFrames dentro da página, este script pode ser útil. Estou supondo que há um valor específico na fonte do iFrame que pode ser usado para localizar o iFrame específico.

var iframes = document.getElementsByTagName('iframe');
var yourIframe = null
for(var i=0; i < iframes.length ;i++){
    var source =  iframes[i].attributes.src.nodeValue;
    if(source.indexOf('/yourSorce') > -1){
        yourIframe = iframes[i];
    }   
}
var iSource = yourIframe.attributes.src.nodeValue;
yourIframe.src = iSource;

Substitua "/ yourSource" pelo valor que você precisa.

sarvesh singh
fonte
0

Se o URL do seu iframe não mudar, você pode simplesmente recriá-lo.

Se o seu iframe não for da mesma origem (esquema de protocolo, nome do host e porta), você não será capaz de saber o URL atual no iframe, então você precisará de um script no documento iframe para trocar mensagens com sua janela pai ( janela da página).

No documento iframe:

window.addEventListener('change', function(e) {
  if (e.data === 'Please reload yourself') {
    var skipCache = true; // true === Shift+F5
    window.location.reload(skipCache);
  }
}

Em sua página:

var iframe = document.getElementById('my-iframe');
var targetOrigin = iframe.src; // Use '*' if you don't care
iframe.postMessage('Please reload yourself', targetOrigin);
Michelpm
fonte
-2

Você pode usar isto:

Js:

function refreshFrame(){
    $('#myFrame').attr('src', "http://blablab.com?v=");
}

Html:

`<iframe id="myFrame" src=""></iframe>`

JS Fiddle: https://jsfiddle.net/wpb20vzx/

Ferhat KOÇER
fonte
1
A questão não tem nada a ver com a popular biblioteca JavaScript chamada jQuery.
John Weisz
O que Math.round () faria? Parece totalmente inútil aqui.
Davide R.
Oi, usei Math.round () porque alguns navegadores podem armazenar em cache a página Url, então a atualização não está funcionando.
Ferhat KOÇER