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

时间:2011-10-24 19:36:56

标签: javascript event-handling refresh

我知道不推荐这样做,但我需要它,因为我在页面中有一个iframe,其中包含实际内容,我希望当用户点击刷新按钮时,iframe不会重新加载整个页面。

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

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

2 个答案:

答案 0 :(得分:3)

更新:我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>

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

  • Safari:什么都不做
  • Chrome:什么都不做
  • Opera 10&amp; 11:什么都不做
  • Firefox 7.x:显示带有两个按钮的特殊提示:
    • 留在页面 - 不重新加载页面
    • 离开页面 - 重新加载页面
  • IE7&amp; IE8:显示带有两个按钮的提示:
    • 确定 - 重新加载页面
    • 取消 - 不重新加载页面
  • IE9:显示带有两个按钮的提示:
    • 离开此页面 - 重新加载
    • 留在此页面 - 不会重新加载

Firefox提示(您可以告诉我在Mac上测试过它)

Firefox Prompt

IE7&amp; IE8提示

IE7 & IE8 Prompt

IE9提示

IE9 Prompt

结束时:

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

您也可以尝试使用cancelBubble和stopPropagation,也可以返回false;可能会揭示有用的东西我对乔丹的回复说你不应该试图覆盖默认值,所以我在这里结束我的实验。

答案 1 :(得分:1)

在onsubmit事件中返回false会阻止表单被提交并保留在同一页面中,而无需任何用户交互。

例如......

当具有输入字段的表单为空并提交此javascript检查以进行验证并相应返回时.. 如果返回false,则不执行任何操作(即页面未刷新或重定向)..

如果验证正常,如果返回true,则执行表单操作..

function validateForm(Str) {
mystring=document.getElementById('inputid').value; 
  if(!mystring.match(/\S/)){
    alert ('Please Enter a String.Field cannot be empty');
  return false;
  }else{
    return true;
  }
}