onbeforeunload消息出现两次(Internet Explorer)

时间:2011-08-02 18:52:51

标签: javascript jquery internet-explorer

我的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特有的。在网上搜索,我已经能够找到许多类似错误的参考资料,令人难以置信地回溯了几个版本的Internet Explorer。但是,我无法找到微软的任何评论或合理的解决方案。以下是我发现的一些看似相关的链接。

  1. http://forums.asp.net/t/1199756.aspx/1
  2. Why is my onbeforeunload handler causing an "Unspecified error" error?
  3. http://www.telerik.com/community/forums/aspnet-ajax/tabstrip/cancel-on-onbeforeunload-in-ie-6-7-create-js-unspecified-error.aspx
  4. http://scottonwriting.net/sowblog/archive/2005/04/19/163068.aspx
  5. http://www.techtalkz.com/internet-explorer/116662-onbeforeunload-dialog-cancel-button-when-window-location-href-bug.html
  6. http://www.ibm.com/developerworks/forums/thread.jspa?messageID=14213927
  7. http://www.webmasterkb.com/Uwe/Forum.aspx/jscript/4321/IE7-and-onbeforeunload
  8. http://www.bigresource.com/ASP-Javascript-Unspecified-Error-BHoy7ptS.html
  9. http://www.4guysfromrolla.com/articles/042005-1.aspx
  10. 有人可以建议一个解决方法吗?看起来Connect不接受IE错误报告。我正在使用IE9

3 个答案:

答案 0 :(得分:9)

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

事实证明,分配window.location = "http://www.domain.com"会在IE中导致此问题。

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

希望这可以帮助别人!

答案 1 :(得分:2)

网址不是onclick属性的有效值。 onclick指定要运行的JavaScript;如果你想在点击div的某个地方导航,你有2个主要选择:

  1. 将div包装在<a href="yoururl">
  2. 写JS做同样的事情,比如:

  3. 前一种方法更好。

答案 2 :(得分:1)

不幸的是,尽管此问题似乎首先出现在以前版本的Internet Explorer中,但这仍然是IE9中的一个错误。

我尝试在Microsoft Connect上提交问题,但无法提交。

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