Eu tenho uma página da web com um IFrame e um botão, uma vez que o botão é pressionado, preciso que o IFrame seja atualizado. Isso é possível, se sim, como? Eu procurei e não consegui encontrar nenhuma resposta.
Eu tenho uma página da web com um IFrame e um botão, uma vez que o botão é pressionado, preciso que o IFrame seja atualizado. Isso é possível, se sim, como? Eu procurei e não consegui encontrar nenhuma resposta.
Respostas:
var iframe = document.getElementById('youriframe');
iframe.src = iframe.src;
Version 24.0.1312.56 Ubuntu 12.04 (24.0.1312.56-0ubuntu0.12.04.1)
var tmp_src = iframe.src; iframe.src = ''; iframe.src = tmp_src;
document.getElementById('frame_id').contentDocument.location.reload(true);
Isso deve ajudar:
document.getElementById('FrameID').contentWindow.location.reload(true);
EDIT: Corrigido o nome do objeto de acordo com o comentário de @Joro.
reload(true)
usar isto:document.getElementById('FrameID').contentWindow.location.replace(new_url);
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();
Funciona para IE, Mozzila, Chrome
document.getElementById('YOUR IFRAME').contentDocument.location.reload(true);
Você pode usar este método simples
function reloadFrame(iFrame) {
iFrame.parentNode.replaceChild(iFrame.cloneNode(), iFrame);
}
Peguei isso daqui
var f = document.getElementById('iframe1');
f.src = f.src;
2017:
Se estiver no mesmo domínio:
iframe.contentWindow.location.reload();
vai funcionar.
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;
}
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.
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.
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);
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/