2015-12-05 4 views
3

При добавлении слушателя к глобальному объекту окна для события 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 ""; 
}); 
+1

Я сомневаюсь, что IE нуждается в реальном 'false' вместо' '' '. Кроме того, 'returnValue' не существует в современной модели обработки событий. – Teemu

+0

Я нигде не возвращаю «ложь». Спасибо за отзыв на 'returnValue'. Я знаю, что это отсутствие в современной обработке событий. Логика вокруг 'returnValue' для хорошей оценки. –

+0

Мой комментарий был, может быть, немного неясным. Я имел в виду, что вы должны возвращать 'false' вместо' '" ''. – Teemu

ответ

13

Решение не возвращать ничего в явной форме.

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;     // return nothing. 
}); 
+2

Это правильно! Вы должны отметить, как решили, просто потратили час, пытаясь понять это. –

+0

Спасибо! Это работает для меня. – DHoover

Смежные вопросы