Pergunta

Meu aplicativo tem páginas com várias guias que simplesmente mudar o conteúdo visível. No entanto, a página também tem links que irá adicionar guias para a página. Além disso, o aplicativo lembra (com cookies) que guia a última vez visto no caso da página é atualizada (configurações estrita de cache causa atualizações mesmo quando se usa nas costas e botões de avançar).

O meu problema é que a primeira vez que visitar este conjunto de páginas, ele deve mostrar a primeira guia (Tab A). Em seguida, você clica em um link, e ele adiciona uma guia, e ele se lembra de que nova guia (Tab B). No entanto, se você bater de volta, agora parece que ele não fez nada porque ele se lembra e exibe a guia você clicou pela última vez (Tab B).

Remembering Tab B é um comportamento desejável se você clicar em frente para uma nova página e, em seguida, usar a nossa história do aplicativo no para retornar à página anterior. No entanto, não é desejável se você clicar no botão Voltar, porque você quer mostrar novamente Tab A, a forma como ele fez quando chegou pela primeira vez.

A minha pergunta é se o JavaScript onunload evento pode detectar a diferença entre sair da página com o botão Voltar, ou algum outro meio. Neste ponto, eu quero que ele esquecer qualquer guias que tinha lembrado por essa página.

Foi útil?

Solução

Se a diferença que você está tentando detectar é entre um usuário clicar em um link e navegar para fora da página de alguma outra forma, você pode detectar um link clique usando JavaScript, anexando manipuladores de eventos onclick a cada link que você deseja observar cliques em .

Então, se incêndios onunload sem um onclick primeiro ter disparado, o usuário é sair da página de alguma outra forma que clicando em um de seus links rastreados.

<script type="text/javascript">
var links = document.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
    links[i].onclick = setGlobal;
}
function setGlobal() {
    window.linkClicked = true;
}
window.onunload = function() {
    if (typeof window.linkClicked === 'undefined' || !window.linkClicked) {
        // they are leaving some other way than by clicking a link
    }
}
</script>

Ele fica um pouco mais complicado se você já tem eventos onclick sobre suas tags <a>, se esse for o caso, posso fornecer uma maneira de fazer isso também.

Claro que você pode também anexar a todos os eventos onclick usando jQuery ou outra biblioteca JavaScript.

Outras dicas

Navegadores lembrar o estado dos temporizadores (chamadas setTimeout) que foram feitas nessa página.

A primeira vez que a página carrega o onLoad será chamado, definir um temporizador que encaminha para a próxima página baseado na história. Se você já está na última página, não há problema:. D, se não, então ele será encaminhado

Para o IE do onLoad é sempre chamado, não importa se é com o botão de volta, portanto, você pode colocar a mesma parte do código lá.

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