Javascript открыть всплывающее окно перед закрытием текущей вкладки
Я хочу открыть всплывающее окно, когда пользователь закрывает последнюю вкладку текущего сайта. У меня проблемы в том, что
- когда браузер запрашивает пользователя (
onbeforeunload
возвращая ненулевое значение), тогда всплывающее окно блокируется браузером (см. случай 1 ниже) - когда браузер ничего не подсказывает пользователю (
onbeforeunload
ничего не возвращая), то всплывающее окно вообще не открывается и, похоже, полностью игнорируется браузером (почему это так?) (см. случай 2 ниже)
Случай 1: приглашение и всплывающее окно заблокированы (код из этого ответа)
window.onbeforeunload = function (e) {
e = e || window.event;
window.open('http://localhost', '_blank');
// For IE and Firefox prior to version 4
if (e) {
e.returnValue = 'Sure?';
}
// For Safari
return 'Sure?';
};
Случай 2: без подсказки, без всплывающего окна, закрытие страницы "нормально"
window.onbeforeunload = function (e) {
e = e || window.event;
window.open('http://localhost', '_blank');
};
2 ответа
Из спецификации:
Алгоритм может показывать всплывающее окно, если выполняется любое из следующих условий
Задача, в которой работает алгоритм, в настоящее время обрабатывает поведение активации, событие щелчка которого было доверенным.
Закрытие окна не является событием щелчка.
Задача, в которой работает алгоритм, в данный момент выполняет прослушиватель событий для доверенного события, тип которого приведен в следующем списке:
unload
нет в этом списке.
Задача, в которой работает алгоритм, была поставлена в очередь алгоритмом, которому было разрешено показывать всплывающее окно, и цепочка таких алгоритмов была запущена в течение определенного пользователем периода.
Например, если пользователь щелкнул по кнопке, всплывающее окно может появиться в результате этого через 4 секунды, но, скорее всего, всплывающее окно не появится в результате этого через 4 часа.
Опять нет. Задача не была поставлена в очередь.
Невозможно открыть всплывающее окно в ответ на попытку пользователя покинуть ваш сайт. Это включило бы слишком много вредоносного поведения (нажмите на это объявление, выйти, всплывающее окно, вы должны нажать на это объявление, цикл).
Вот мой код:
var popWindow = true;
window.onbeforeunload = function() {
if(popWindow == true) {
popWindow = false;
return "Sure?";
}
}