Поймать событие закрытия вкладки в веб-браузере? - PullRequest
4 голосов
/ 26 сентября 2008

Есть ли способ узнать, закрывает ли пользователь вкладку в веб-браузере? В частности, IE7, но также FireFox и другие. Я хотел бы иметь возможность справиться с этой ситуацией из нашего кода ASP, если текущая вкладка, содержащая наш веб-сайт закрывается.

Ответы [ 7 ]

6 голосов
/ 01 декабря 2010

onbeforeunload также вызывается при следующих событиях -

* 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.

Итак, если вы пытаетесь выйти из системы, если пользователь закрывает вкладку или окно браузера, вы в конечном итоге выходите из него каждый раз, когда они нажимают на ссылку или отправляют страницу.

2 голосов
/ 26 сентября 2008

Присоединить событие « onbeforeunload ». Он может выполнить код непосредственно перед закрытием браузера / вкладки.

1 голос
/ 26 сентября 2008

Разве document.unload не делает этого, если вы?

0 голосов
/ 29 марта 2012

Сантош прав, это событие будет вызвано гораздо большим количеством действий, чем просто нажатие кнопки закрытия на вкладке / в браузере. Я создал небольшой хак для предотвращения запуска действия onbeforeunload, добавив следующую функцию в готовый документ.

       $(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');
            });
        });

Кроме того, перед тем, как вызвать какое-либо из событий, упомянутых Сантошем, вам нужно запустить следующую строку:

window.onbeforeunload = null;

Если вы не хотите, чтобы событие было запущено.

И вот последний фрагмент кода:

    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?";       
    }
0 голосов
/ 17 ноября 2010

Я уверен, что ОП запрашивает из контекста самой веб-страницы, но для любых разработчиков Firefox-аддонов, которые сталкиваются с этим вопросом, вы можете использовать событие TabClose. https://developer.mozilla.org/en/Code_snippets/Tabbed_browser#Notification_when_a_tab_is_added_or_removed

0 голосов
/ 11 октября 2008

Как предложил Эран Гальперин, используйте onbeforeunload. В частности, вернуть строку, и эта строка будет включена в диалоговое окно подтверждения, которое позволит пользователю выбрать, покинуть ли страницу. Каждый браузер содержит некоторый текст до и после возвращаемой строки, поэтому вам следует протестировать в разных браузерах, чтобы увидеть, что пользователю будет представлено.

0 голосов
/ 29 сентября 2008

Если вам необходимо знать, когда страница закрыта на стороне сервера, лучше всего периодически пинговать сервер со страницы (например, через XMLHttpRequest). Когда пинг прекращается, страница закрывается. Это также будет работать, если браузер вышел из строя, был остановлен или компьютер был выключен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...