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