防止使用 JavaScript 刷新/重新加载页面

xus*_*uso 6 javascript refresh event-handling

我知道不建议这样做,但我需要它,因为页面内有一个 iframe,它具有实际内容,并且我希望当用户点击刷新按钮时,iframe 不会重新加载整个页面。

我知道我必须打电话onunload/onbeforeunload事件,但我不想问我是否要离开窗口,只是不要。

那可能吗?我已经处理了 F5 键,但我也喜欢阻止按钮刷新。

Pau*_*l J 7

更新:我在 5 年前写过这篇文章,现在浏览器做了不同的事情,你仍然可以使用它来测试你的浏览器设置,但你的体验可能与我以前的研究有所不同。

尝试使用 jQuery,因为我很懒。

从理论上讲,防止默认行为应该阻止事件执行其应该执行的操作。它不适用于我的示例中的事件,并且在不同的浏览器中具有不同的结果。我放入 Math.random() 来确定页面是否已重新加载。由于不同的浏览器执行不同的操作,因此我强烈建议不要在生产环境中使用它。

<body>
<p></p>
<script type="text/javascript">
    $('p').append(Math.random());

    $(window).bind({
        beforeunload: function(ev) {
            ev.preventDefault();
        },
        unload: function(ev) {
            ev.preventDefault();
        }
    });
</script>
</body>
Run Code Online (Sandbox Code Playgroud)

使用 CTRL-R 或 F5 或重新加载按钮:

  • Safari:什么都不做
  • Chrome:什么都不做
  • Opera 10 和 11:不执行任何操作
  • Firefox 7.x:显示带有两个按钮的特殊提示:
    • 留在页面上 - 不重新加载页面
    • 离开页面 - 重新加载页面
  • IE7 和 IE8:显示带有两个按钮的提示:
    • 确定 - 重新加载页面
    • 取消 - 不重新加载页面
  • IE9:显示带有两个按钮的提示:
    • 离开此页面 - 重新加载
    • 留在此页面 - 不重新加载

Firefox 提示(你可以看出我是在 Mac 上测试的)

火狐提示

IE7 & IE8 提示

IE7 & IE8 提示

IE9提示

IE9提示

结束语:

是的,我没有测试 IE6,我删除了安装了 IE6 的虚拟机,我没有安装了 IE10 beta 的虚拟机,所以你也运气不好。

您还可以尝试 cancelBubble 和 stopPropagation 或者返回 false;可能会揭示一些有用的东西。我对乔丹的答复感到不满,即您不应该尝试覆盖默认设置,因此我在这里结束我的实验。