Pegar um próximo evento aba no navegador web?
-
02-07-2019 - |
Pergunta
Existe alguma maneira de saber se o usuário fechar uma aba em um navegador da web? Especificamente IE7, mas também FireFox e outros também. Eu gostaria de ser capaz de lidar com esta situação de nosso código de asp se a guia atual contendo nossos fecha web site.
Solução
Anexar um evento " onbeforeunload " . Ele pode executar um código pouco antes das fecha navegador / guia.
Outras dicas
onbeforeunload também é chamado nos seguintes eventos -
* Close the current browser window.
* Navigate to another location by entering a new address or selecting a Favorite.
* Click the Back, Forward, Refresh, or Home button.
* Click an anchor that refers the browser to another Web page.
* Invoke the anchor.click method.
* Invoke the document.write method.
* Invoke the document.open method.
* Invoke the document.close method.
* Invoke the window.close method.
* Invoke the window.open method, providing the possible value _self for the window name.
* Invoke the window.navigate or NavigateAndFind method.
* Invoke the location.replace method.
* Invoke the location.reload method.
* Specify a new value for the location.href property.
* Submit a form to the address specified in the ACTION attribute via the INPUT type=submit control, or invoke the form.submit method.
Então, se você está tentando fazer logoff o usuário se fechar a janela ou aba de navegador, você iria acabar registrando-los cada vez que clicar em um link ou enviar a página.
não document.unload fazê-lo se você?
Se você precisa saber quando a página é fechada no lado do servidor, sua melhor aposta é fazer o ping do servidor periodicamente a partir da página (via XMLHttpRequest
, por exemplo). Quando ping paradas, a página é fechada. Isso também funcionará se o navegador caiu, foi encerrado ou o computador foi desligado.
Como Eran Galperin sugeriu, uso onbeforeunload
. Particularmente, retornar uma string, e que string será incluído em um diálogo de confirmação que permitirá ao usuário escolher se quer ou não deixar a página. Cada navegador inclui algum texto antes e depois da seqüência de você voltar, então você deve testar em diferentes navegadores para ver o que um usuário poderia ser apresentado.
Tenho certeza que o OP está pedindo a partir do contexto da própria página web, mas para qualquer firefox-addon-desenvolvedores que vêm através desta pergunta, você pode usar o evento TabClose
. https://developer.mozilla.org/en/Code_snippets/Tabbed_browser#Notification_when_a_tab_is_added_or_removed
Santosh é certo, este evento será acionado em muitas mais ações do que apenas clicar no botão Fechar da guia / browser. Eu criei um pequeno hack para evitar a ação onbeforeunload para ser disparado, adicionando a seguinte função no documento pronto.
$(function () {
window.onbeforeunload = OnBeforeUnload;
$(window).data('beforeunload', window.onbeforeunload);
$('body').delegate('a', 'hover', function (event) {
if (event.type === 'mouseenter' || event.type === "mouseover")
window.onbeforeunload = null;
else
window.onbeforeunload = $(window).data('beforeunload');
});
});
Além disso, antes de acionar qualquer um dos eventos mencionados por Santosh, você precisa executar esta linha:
window.onbeforeunload = null;
Se você não quiser que o evento a ser acionado.
E aqui está o pedaço de código final:
function OnBeforeUnload(oEvent) {
// return a string to show the warning message (not every browser will use this string in the dialog)
// or run the code you need when the user closes your page
return "Are you sure you want to close this window?";
}