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

时间:2015-12-05 21:09:16

标签: javascript internet-explorer-11 onbeforeunload

将监听器添加到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 "";
});

1 个答案:

答案 0 :(得分:18)

解决方案不是返回任何内容(与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;
});