O navegador traseiro atua no Iframe aninhado antes da própria página - existe uma maneira de evitá -la?
-
20-09-2019 - |
Pergunta
Eu tenho uma página com dados dinâmicos carregados por alguns Ajax e muito JavaScript.
A página contém uma lista da qual o usuário pode escolher e cada valor selecionado carrega novos dados na página.
Um desses itens de dados é um URL fornecido a um iframe.
eu uso JQuery BBQ: BOTURA DE VOLTA E BIBLIOTECA DE Query Para simular o comportamento do navegador.
Tudo funciona bem, além do fato de que, quando clico no botão Voltar pela primeira vez, o Iframe remonta ao local anterior e, em seguida, preciso clicar novamente para fazer a página voltar.
Existe uma maneira de desativar o comportamento das costas do iframe?
Solução
Eu achei a resposta para o meu problema, acho que poderia ser útil para outras pessoas por aí.
O problema estava com a maneira como eu atribuí novos URLs ao meu iframe, usei o jQuery, então parecia algo assim:
$('#myIFrame').attr('src',newUrl);
Ao atribuir o URL dessa maneira, ele adiciona uma nova entrada à lista de URLs visitados do navegador para voltar.
Esse não era o comportamento desejado, então, depois de pesquisar no Google, descobri que você pode atribuir um novo URL a um objeto Iframe sem adicioná-lo à 'lista de volta', parece assim:
var frame = $('#myIFrame')[0];
frame.contentWindow.location.replace(newUrl);
Dessa forma, meu botão traseiro se comporta exatamente como o esperado.
btw, recebi minha resposta de aqui.
Espero que isso tenha sido útil para você como foi para mim.
Outras dicas
A resposta aceita não parece funcionar se você tentar definir um URL de domínio cruzado para o iframe. Como solução alternativa, eu desapeguei o iframe do DOM antes de definir o src
(usando jQuery).
// remove IFrame from DOM before setting source,
// to prevent adding entries to browser history
var newUrl = 'http://www.example.com';
var iFrame = $('#myIFrame');
var iFrameParent = iFrame.parent();
iFrame.remove();
iFrame.attr('src', newUrl);
iFrameParent.append(iFrame);
Eu sugiro que você crie um hiperlink dentro do seu iframe. Chame de 'de volta' e coloque um href como javascript: history.back (-1) que é o melhor que você pode fazer.
Basicamente, você precisa impedir a adição de novas entradas de histórico no iframe, History.Replacestate Introduzido no HTML5 funcionaria na maioria dos casos.
history.pushState(state, title, url);
Não, isso depende inteiramente do navegador.