为 beforeunload
事件向全局窗口对象添加监听器时,IE 11(和 10)的行为与 Chrome 和 Firefox 不同。
通常,您会返回一个字符串,该字符串将用于填充浏览器 native 对话框提示,或者如果您不希望对话框提示用户,则返回一个空字符串。
但是,在 IE 11 中,如果您返回空字符串和/或将 evt.returnValue
设置为空字符串,则会打开浏览器原生的“导航离开”对话框并提示用户承认他们可能会丢失未保存的更改。
有什么办法(无需删除事件监听器)让对话框不出现在 IE 11 中?
查看我的 JSFiddle (在 IE 中——因为这应该在 Chrome、Firefox 和 Safari 中正常工作)。
这是 fiddle 中的来源:
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;
或return undefined;
相同)。
var isDirty = false;
var message = '** You have unsaved changes. **'
window.addEventListener('beforeunload', function(evt){
if(isDirty) {
evt.returnValue = message;
return message;
}
delete evt.returnValue;
});
关于javascript - beforeunload on IE 11 - 不提示用户不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34110931/