При добавлении слушателя к глобальному объекту окна для события beforeunload
IE 11 (и 10) не ведет себя как Chrome и Firefox.beforeunload on IE 11 - не запрашивать пользователя не работает
Обычно вы возвращаете строку, которая будет использоваться для заполнения приглашения диалогового окна браузера или возврата пустой строки, если вы не хотите, чтобы диалоговое окно запрашивало пользователя.
Однако в IE 11, если вы возвращаете пустую строку и/или устанавливаете evt.returnValue
в пустую строку, открывается диалоговое окно Navigate Away на основе браузера и запрашивает у пользователя подтверждение того, что они могут потерять несохраненные изменения ,
Есть ли способ (без необходимости удалить прослушиватель событий), чтобы диалог не отображался в IE 11?
См. Мой JSFiddle (в IE - как это должно работать должным образом в Chrome, Firefox и Safari).
Вот источник в скрипкой:
var isDirty = false;
var message = '** You have unsaved changes. **'
window.addEventListener('beforeunload', function(evt){
if(isDirty) {
evt.returnValue = message;
return message;
}
delete evt.returnValue;
return "";
});
Я сомневаюсь, что IE нуждается в реальном 'false' вместо' '' '. Кроме того, 'returnValue' не существует в современной модели обработки событий. – Teemu
Я нигде не возвращаю «ложь». Спасибо за отзыв на 'returnValue'. Я знаю, что это отсутствие в современной обработке событий. Логика вокруг 'returnValue' для хорошей оценки. –
Мой комментарий был, может быть, немного неясным. Я имел в виду, что вы должны возвращать 'false' вместо' '" ''. – Teemu