Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Событие на закрытие окна браузера пользователем (https://javascript.ru/forum/events/44306-sobytie-na-zakrytie-okna-brauzera-polzovatelem.html)

Stilus 15.01.2014 01:50

Событие на закрытие окна браузера пользователем
 
Добрый день всем пользователям!
Помогите разобраться и решить такой вопрос:
Есть открытое окно браузера. Мне нужно кроссбраузерно отследить событие закрытия этого окна. То есть, если клиент например кликнет на крестик окна, то перед тем как окно закроется, мне нужно вызвать из этого окна функцию и после закрыть окно!
Пробовал очень много вариантов.
Мне нужно вывести пользователю confirm(), и в зависимости от его ответа, вызывать функцию и после закрыть окно браузера или ничего не делать если он не подтвердил.

Пример:

window.onbeforeunload = function()
{
var hack = /irefox\/([4-9]|1\d+)/.test(navigator.userAgent);
if (hack)
{
chat.userClickEndChat();
}
else
{
chat.userClickEndChat();
}
}



но пример работает только в хроме и safari, а вот с оперой и фаерфоксом проблемы.

:help:

danik.js 15.01.2014 05:00

Цитата:

Сообщение от Stilus
но пример работает только в хроме и safari, а вот с оперой и фаерфоксом проблемы.

Все верно. В опере нет никаких событий по закрытию окна. А в firefox нет возможности выдать окно подтверждения.
Думай как обойтись без окон и даже без события.

kostyanet 15.01.2014 23:17

Есть в FF диалог. Только текст нельзя поменять в нем.

Stilus 18.01.2014 00:42

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

var warning = "Вы потеряли чат!"
window.onbeforeunload = function warn()
{ var hack = /irefox\/([4-9]|1\d+)/.test(navigator.userAgent);
if (hack)
{
chat.userClickEndChat();
return warning;
}
else
{
chat.userClickEndChat();
return warning;
}

};


Часовой пояс GMT +3, время: 15:07.