【问题标题】:beforeunload on IE 11 - do not prompt user does not workIE 11 上的 beforeunload - 不提示用户不工作
【发布时间】: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


【解决方案1】:

解决方法是不返回任何东西(与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;
});

【讨论】:

  • 这是正确的!您应该标记为已解决,只是花了一个小时试图解决这个问题。
猜你喜欢
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2011-12-30
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多