一旦用户在我的页面上,我不希望他刷新页面。
任何时候,用户点击F5或刷新顶部的按钮。他应该得到警报说
您无法刷新页面。
此外,如果用户打开一个新选项卡并尝试访问上一个选项卡中的相同网址,他应该收到警报
您不能在 2 个选项卡中打开同一页面
无论如何,我可以使用 JavaScript 或 jQuery 来做到这一点吗?第一点真的很重要。
一旦用户在我的页面上,我不希望他刷新页面。
任何时候,用户点击F5或刷新顶部的按钮。他应该得到警报说
您无法刷新页面。
此外,如果用户打开一个新选项卡并尝试访问上一个选项卡中的相同网址,他应该收到警报
您不能在 2 个选项卡中打开同一页面
无论如何,我可以使用 JavaScript 或 jQuery 来做到这一点吗?第一点真的很重要。
#1 可以通过window.onbeforeunload
.
例如:
<script type="text/javascript">
window.onbeforeunload = function() {
return "Dude, are you sure you want to leave? Think of the kittens!";
}
</script>
用户将收到消息提示,并提供留在页面上或继续前进的选项。这变得越来越普遍。如果您在键入帖子时尝试离开页面,Stack Overflow 会执行此操作。你不能完全阻止用户重新加载,但如果他们这样做,你可以让它听起来很可怕。
#2 或多或少是不可能的。即使您跟踪会话和用户登录,您仍然无法保证您正确检测到第二个选项卡。例如,也许我打开了一个窗口,然后将其关闭。现在我打开一个新窗口。即使我已经关闭了第一个选项卡,您也可能会将其检测为第二个选项卡。现在您的用户无法访问第一个窗口,因为他们关闭了它,并且他们无法访问第二个窗口,因为您拒绝了他们。
事实上,我银行的在线系统真的很努力地做#2,而且上面描述的情况一直在发生。我通常必须等到服务器端会话过期才能再次使用银行系统。
你不能阻止用户刷新,也不应该真的去尝试。你应该回到为什么你需要这个解决方案,这里的根本问题是什么?。从那里开始,找到解决问题的不同方法。也许您详细说明了为什么您认为需要这样做,这将有助于找到这样的解决方案。
打破基本的浏览器功能从来都不是一个好主意,超过 99.999999999% 的互联网工作并使用 F5 刷新,这是用户的期望,你不应该打破。
尽管禁用 F5 键不是一个好主意,但您可以在 JQuery 中执行此操作,如下所示。
<script type="text/javascript">
function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); };
$(document).ready(function(){
$(document).on("keydown", disableF5);
});
</script>
希望这会有所帮助!
回到 CGI 的旧时代,我们有许多表单可以触发各种后端操作。例如对组的文本通知、打印作业、数据农业等。
如果用户在一个页面上说“请稍候......执行一些可能需要一些时间的巨大工作。”。他们更有可能点击刷新,这将是糟糕的!
为什么?因为它会触发更多缓慢的工作并最终使整个事情陷入困境。
解决方案?允许他们做他们的形式。当他们提交表单时... 开始你的工作,然后将他们引导到另一个页面,告诉他们等待。
中间的页面实际上保存了启动作业所需的表单数据。然而,WAIT 页面包含一个 javascript 历史销毁。因此,他们可以随心所欲地重新加载该等待页面,并且它永远不会触发原始作业在后台启动,因为该 WAIT 页面仅包含 WAIT 本身所需的表单数据。
希望这是有道理的。
历史记录销毁功能也阻止了他们点击返回然后刷新。
它非常无缝,并且在非营利组织倒闭之前一直很好地工作了很多年。
示例:FORM ENTRY - 收集他们的所有信息,并在提交时触发您的后端工作。
来自表单条目的响应 - 返回执行重定向到静态等待页面和/或 POST/GET 到另一个表单(等待页面)的 HTML。
等待页面 - 仅包含与等待页面相关的 FORM 数据以及用于销毁最近历史记录的 javascript。像 (-1 OR -2) 只销毁最近的页面,但仍然允许它们返回到原始的 FORM 条目页面。
一旦他们进入您的 WAIT 页面,他们就可以根据需要单击 REFRESH,并且它永远不会在后端生成原始的 FORM 作业。相反,您的 WAIT 页面应该包含一个 META 定时刷新本身,以便它可以始终检查他们的工作状态。当他们的工作完成后,他们会从等待页面重定向到您希望的任何位置。
如果他们手动刷新...他们只是在那里再添加一项对他们的工作状态的检查。
希望有帮助。祝你好运。