beforeunload on IE 11 - 不提示用户不起作用

beforeunload on IE 11 - do not prompt user does not work

beforeunload 事件向全局 window 对象添加侦听器时,IE 11(和 10)的行为与 Chrome 和 Firefox 不同。

通常,您 return 一个将用于填充浏览器本机对话框提示的字符串,或者如果您不希望对话框提示用户,您 return 一个空字符串。

但是,在 IE 11 中,如果您 return 空字符串 and/or 将 evt.returnValue 设置为空字符串,则会打开浏览器本机 'Navigate Away' 对话框并提示用户确认他们可能会丢失未保存的更改。

是否有任何方法(无需删除事件侦听器)让对话框不出现在 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;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;
});