IE 11上的beforeunload - 不提示用户不起作用

fre*_*ury 12 javascript onbeforeunload internet-explorer-11

将侦听器添加到beforeunload事件的全局窗口对象时,IE 11(和10)不会像Chrome和Firefox那样运行.

通常,如果不希望对话框提示用户,则返回将用于填充浏览器本机对话框提示的字符串,或者返回空字符串.

但是,在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 "";
});
Run Code Online (Sandbox Code Playgroud)

fre*_*ury 23

解决方案不是返回任何东西(与return;or 相同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;
});
Run Code Online (Sandbox Code Playgroud)

  • 这是对的!你应该标记为已解决,只花了一个小时试图解决这个问题. (2认同)