O navegador traseiro atua no Iframe aninhado antes da própria página - existe uma maneira de evitá -la?

StackOverflow https://stackoverflow.com/questions/2245883

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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top