一尘不染

使用JavaScript禁用F5和浏览器刷新

javascript

我想使用JavaScript禁用浏览器刷新。

当前,我正在使用,window.onbeforeunload并且我不希望在用户刷新浏览器时调用它。

最好的方法是什么?


阅读 834

收藏
2020-05-01

共1个答案

一尘不染

更新
最近的评论声称这在新的Chrome中不起作用…如jsFiddle所示,并在我的个人网站上进行了测试,此方法从Chrome版本开始仍然有效26.0.1410.64m

顺便说一下,这在jQuery中非常容易:

// slight update to account for browsers not supporting e.which
function disableF5(e) { if ((e.which || e.keyCode) == 116) e.preventDefault(); };
// To disable f5
    /* jQuery < 1.7 */
$(document).bind("keydown", disableF5);
/* OR jQuery >= 1.7 */
$(document).on("keydown", disableF5);

// To re-enable f5
    /* jQuery < 1.7 */
$(document).unbind("keydown", disableF5);
/* OR jQuery >= 1.7 */
$(document).off("keydown", disableF5);

附带说明:这只会禁用键盘上的f5按钮。要真正禁用刷新,您必须使用服务器端脚本来检查页面状态更改。不能说我真的不知道怎么做,因为我还没有做。

在我工作的软件站点上,我们将我的disableF5函数与Codeigniter的会话数据结合使用。例如,有一个锁定按钮将锁定屏幕并提示密码对话框。函数“disableF5”快速简便,可防止该按钮执行任何操作。但是,为防止鼠标单击刷新按钮,发生了一些事情。

  1. 单击锁定时,用户会话数据具有一个称为“ locked”的变量,该变量变为TRUE
  2. 单击刷新按钮时,在母版页加载方法中,将检查会话数据是否为“锁定”,如果为TRUE,则我们简单地不允许重定向,并且无论请求的目标是什么,页面都不会更改

提示:
尝试使用服务器设置的cookie(例如PHP$_SESSION或什至.Net的cookie)Response.Cookies来维护客户端在站点中的“位置”。这是我使用CI的Session类所做的香草的方法。最大的不同是CI在您的数据库中使用了Table,而这些 常规
方法在客户端中存储了可编辑的cookie。缺点是,用户可以清除其Cookie。

2020-05-01