window.onbeforeunload обрабатывает параметры ok и отменяет

У меня есть функция window.onbeforeunload, которая генерирует сообщение по умолчанию «Вы уверены, что хотите уйти с этой страницы…». Если мы нажмем «ОК», нас перенаправят на новую ссылку, а если мы нажмем «Отмена», нас перенаправят обратно на ту же страницу.

Я хочу сохранить некоторые данные со страницы, когда мы нажмем «ок» и отойдем от страницы. Как мы можем узнать, было ли нажато «ok» или «cancel», затем сделать вызов события и продолжить с опцией «ok»/«cancel».


person prateek    schedule 07.04.2011    source источник


Ответы (3)


Возможным подходом может быть также подключение к событию onunload, и если этот обработчик вызывается, вы знаете, что пользователь выбрал OK.

В onbeforeunload установите обратный вызов тайм-аута, который вызывается через некоторое время (например, через 1 секунду), и если он вызывается, пользователь мог выбрать Cancel.

Не уверен, насколько это безопасно в отношении условий гонки.

person Arc    schedule 07.04.2011
comment
Это действительно работает, однако 1 секунда слишком коротка, что делает ее абсолютно ужасным способом узнать, решил ли пользователь отменить подписку. Мне пришлось использовать тайм-аут от 5 до 10 секунд, чтобы убедиться, что я все правильно понял. - person Alexis Wilke; 19.01.2015

Вы используете диалоговое окно подтверждения JavaScript?

if(confirm("Are you sure you want to navigate away from this page....")) {
    // OK was pressed
} else {
    // Cancel was pressed
}
person Jim Blackler    schedule 07.04.2011
comment
Диалог, вероятно, генерируется браузером. developer.mozilla.org/en/DOM/window.onbeforeunload - person Arc; 07.04.2011
comment
Вы не можете использовать функцию confirm() в файле onunloadbefore(). Это не сработает. Браузер создает диалоговое окно подтверждения, когда вы возвращаете строку. - person Alexis Wilke; 19.01.2015

person    schedule
comment
Я хочу сохранять данные только тогда, когда я нажимаю «ОК», а не когда я нажимаю «Отмена». В вашем решении данные будут сохранены в обоих случаях. - person prateek; 07.04.2011