在Internet Explorer中,onbeforeunload消息出现了两次

4
我在ASP.NET网页上有以下脚本,用于警告用户当他们离开未保存更改的页面时。
$(document).ready(function() {
    $('input:not(:button,:submit),textarea,select').change(function () {
        window.onbeforeunload = function () {
            return 'Changes made to this page have not been saved!';
        }
    });
});

这个功能的实现是符合预期的,但在用户使用Internet Explorer并尝试使用像这样的链接导航时,会遇到一些问题。

<div onclick="window.location=&#39;http://www.domain.com&#39;;">Text</div>

如果用户选择“留在此页面”,那么消息框会出现两次。然后,如果他们第二次选择“留在此页面”,调试器会用以下消息突出显示上面的链接:

Microsoft JScript运行时错误:未指定错误。

这个问题似乎只出现在Internet Explorer浏览器中。在搜索网络时,我能够找到许多与之相关的bug引用,可惊人的是这些引用已经追溯到几个版本的Internet Explorer。然而,我无法找到微软的任何说明或合理的修复方法。下面是我找到的一些相关链接。
  1. 为什么我的 onbeforeunload 处理程序会引发 "未指定错误" 错误?
  2. 为什么我的 onbeforeunload 处理程序会引发 "未指定错误" 错误?
  3. 如何解决在 IE 6/7 中使用 onbeforeunload 函数时取消后出现 JS “未指定错误”问题?
  4. 为什么在 Internet Explorer 中设置 document.location.href 后,单击取消会导致 onbeforeunload 函数出错?
  5. 当使用 window.location.href 并单击“取消”按钮时,在 Internet Explorer 中为什么 onbeforeunload 对话框会出错?
  6. 在 Internet Explorer 中,为什么 onbeforeunload 函数会出现 “未指定错误”?
  7. 在 IE7 中如何解决 onbeforeunload 的问题?
  8. 当使用 onbeforeunload 函数时,为什么 JavaScript 报告 "未指定错误"?
  9. 如何正确地使用 onbeforeunload 事件?

有没有人能提供解决方案?看起来 Connect 并不接受 IE 的错误报告。我正在使用 IE9。

3个回答

10

我们在IE11中遇到了同样的问题。

事实证明,将window.location = "http://www.domain.com"赋值会导致IE中出现这个问题。

如果你改用location.href = "http://www.domain.com",它只会提示用户一次。

希望这能帮助某些人!


我曾经对IE中的unbeforeload问题感到沮丧,但这个解决方案非常有效!谢谢! - Ritesh Puri

2

URL并不是onclick属性的有效值。 onclick指定要运行的JavaScript代码;如果您希望在单击div时导航到某个地方,您有两个主要选择:

  1. 将div包装在<a href="yoururl">
  2. 编写JS执行相同的操作,例如:

前一种方法更好。


糟糕!我真诚地道歉。尽管我已经尽力了,但那是一个打字错误。现在已经更正了。 - Jonathan Wood

1

很不幸的是,尽管这个问题似乎最初出现在早期版本的Internet Explorer中,但它仍然存在于IE9中。

我尝试在Microsoft Connect上提交问题,但未能成功。

无论如何,这个问题与通过JavaScript退出页面有关。通过将我的<div>包装在锚标签<a href="..."><div></div></a>中解决了这个问题。使用常规链接,目前已经解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接