向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 "";
});
解决方案是不返回任何值(与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;
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句