我可以在我的 webapp 中禁用浏览器刷新吗?
Posted
技术标签:
【中文标题】我可以在我的 webapp 中禁用浏览器刷新吗?【英文标题】:Can I disable browser refresh in my webapp? 【发布时间】:2011-08-08 09:11:04 【问题描述】:我想在我的网站上禁用刷新。有什么方法可以禁用 F5、Ctrl-R 或在网页中重新加载?
【问题讨论】:
每次我听到开发者提出这种可能性,都是因为他们发现刷新浏览器会破坏他们的代码。但只有当他们的代码忽略或覆盖 Web 浏览器的基本导航模型——他们正在开发的平台时,这才是真正可能的。答案是不要进一步弄乱模型。这是为了解决您正在做的任何事情,这些事情会破坏 Web 的正常预期行为。 如果页面包含定时器,需要关闭刷新。其他计时器将从头开始。 @Thahakp bigmattyh 的评论建议如何继续:使用 sessionStorage/localStorage 来存储启动计时器时的时间戳,用默认的开始时间减去经过的时间来初始化计时器,当计时器到时删除存储的值触发器。否则,恕我直言,您接受可能会损害用户体验,以减轻您编程的不便。 @MattHowell 这里不是这样,Reload 不会破坏我的代码,它运行良好并且执行我所期望的。但是通过运行一个函数来拒绝重新加载将使我的小型应用程序的用户体验明显更好 【参考方案1】:window.onbeforeunload = function () return false;
这将禁止离开页面,除非用户确认,而不是仅刷新,因此您必须自己编写代码才能使其正常工作。
你从来没有说过你用它做什么,所以我把它留在那里。
【讨论】:
B但是如何自定义消息呢? ***.com/questions/38879742/… “我很惊讶每个人都说你不能这样做”我认为每个人都是对的。您可以显示确认模式,但无论如何都不能禁用页面重新加载。【参考方案2】:不,没有办法禁用它。
如果您想避免 “您要再次提交此操作吗?”对话框,请使用 Post/Redirect/Get。
【讨论】:
【参考方案3】:每次进入页面时检查 cookie。 如果 cookie 在那里,那么您就知道进行了刷新。
如果 cookie 不存在,则创建一个持续时间为零的 cookie(仅在浏览器仍然打开之前存在)
【讨论】:
【参考方案4】:不,没有这样的方法。你可以警告用户不要刷新
【讨论】:
【参考方案5】:我不知道如何禁用刷新点击(我自己仍然需要那个) 除了使用服务器端脚本来停止“重定向” 但是,我知道 jQuery 非常容易禁用 F5:
function disableF5(e) if (e.which == 116) e.preventDefault(); ;
// To disable f5
$(document).bind("keydown", disableF5);
// To re-enable f5
$(document).unbind("keydown", disableF5);
【讨论】:
【参考方案6】:我有一个建议。此页面中有一个答案框。
(下面带有您的答案标签)
在其中输入一些文本。 然后刷新此页面当您刷新时显示一些警告消息,我建议您显示类似的警告消息,而不是禁用刷新功能。
【讨论】:
【参考方案7】:可能有一些技巧适用于某些浏览器,但没有什么可以保证它们无法刷新页面。浏览器和网络标准是完全开放的,因此用户可以轻松破解浏览器来解决您实施的任何问题。
如果刷新会对用户体验产生负面影响,最好给他们一个文字警告。
如果这是为了修复错误(例如缺乏幂等性),您应该考虑修复错误。
【讨论】:
【参考方案8】:有一种方法可以防止用户按 F5 刷新您的页面。在你的 body 标签内试试这个代码:
<body onkeydown="return (event.keyCode != 116)">
【讨论】:
【参考方案9】:如果你想禁用 ctrl+f5 , ctrl+R , f5 ,backspace 那么你可以使用这个简单的代码。此代码适用于 Mozilla 和 Chrome 。在你的 body 标签中添加这段代码:
<body onkeydown="return (event.keyCode == 154)">
【讨论】:
以上是关于我可以在我的 webapp 中禁用浏览器刷新吗?的主要内容,如果未能解决你的问题,请参考以下文章
我可以通过 JavaScript 禁用 CSS :hover 效果吗?
禁用后退按钮,刷新 Angular 11 中的 webApp。这是保存当前页面所需的 MCQ 类型问题,并且仅限于 moove prev