之前的奇怪

时间:2011-08-23 04:55:26

标签: javascript jquery google-chrome internet-explorer-7

问题

使用$(window).bind("beforeunload", ...[snip]询问用户是否希望离开页面会在某些浏览器中产生一些奇怪的结果。弹出对话框,询问您是希望留在页面上还是离开页面。如果您点击页面上的停留选项,谷歌浏览器(最新 - 13.0.782.215米)和WinIE7会弹出“后退”按钮中的最后一个历史页面。

为了说明这一点,当前的会话历史记录包括访问以下页面:

  • Page 3
  • Page 2
  • Page 1

您决定离开第3页并发生beforeunload事件。您选择留在当前页面。

再次单击后退按钮,这次决定离开页面。你应该发现自己处于第2页,而不是你在第1页。你可以再次前进到第2页。

问题

当我们选择“保持当前页面”选项时,如何阻止浏览器从后退按钮中删除这些页面?有可能吗?

问题示例

使用谷歌浏览器,在新窗口中,前往http://stackoverflow.com并浏览几个问题,而无需返回。然后点击Ask Question按钮。开始在对话框中输入内容。在浏览器中按返回。选择留在页面上。再次按回浏览器,这次选择“离开页面”选项。你现在已经回到了历史的两页。如果您多次点击停留在页面上,您基本上可以返回多个页面。

为什么这很重要?!

我不想混淆我的用户。他们不是精通计算机的类型。

我的代码(不是相关的)

$(window).bind("beforeunload", function(){
    if (in_edit > 0){
        return "You are currently editing this job.\n\nAre you sure you wish to exit the page?";
    }
});

2 个答案:

答案 0 :(得分:1)

Chromium在2012年解决了这个问题: 您可以在此处查看详细信息: https://code.google.com/p/chromium/issues/detail?id=93858

答案 1 :(得分:0)

您可以尝试在页面中包含隐藏的iframe,然后在onbeforeunload函数中更改该iframe上的src。 这可能包括历史记录中可能从历史堆栈中删除的另一个URL,而不是您当前所在的页面。

所以历史看起来像这样:

Page3
Page2
Page1

onbeforeunload更改了iframe:

Dummy
Page3
Page2
Page1

但这只是猜测可能有效,你需要尝试这个......