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.

Foi útil?

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?";       
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top