【发布时间】:2015-12-05 21:09:15
【问题描述】:
为beforeunload 事件向全局窗口对象添加侦听器时,IE 11(和 10)的行为与 Chrome 和 Firefox 不同。
通常,您返回一个用于填充浏览器原生对话框提示的字符串,或者如果您不希望对话框提示用户,则返回一个空字符串。
但是,在 IE 11 中,如果您返回一个空字符串和/或将 evt.returnValue 设置为一个空字符串,则会打开浏览器原生的“导航离开”对话框并提示用户确认他们可能会丢失未保存的变化。
有什么方法(无需删除事件侦听器)让对话框不出现在 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在现代事件处理模型中不存在。 -
我不会在任何地方返回
false。感谢returnValue的提示。我知道现代事件处理中没有它。returnValue周围的逻辑是很好的衡量标准。 -
我的评论可能有点不清楚。我的意思是,你应该返回
false而不是""'。
标签: javascript internet-explorer-11 onbeforeunload