全面考察“禁用浏览器后退按钮”

React滚动行为工程化:一致性、精准性与性能兜底 滚动行为在现代React单页应用中远不止CSS动画,而是涉及DOM生命周期、状态同步、SSR水合、用户偏好与无障碍标准的系统性问题。其核心原理在于协调虚拟DOM更新与原生滚动队列的时序冲突,并保障锚点定位在动态布局(如Sticky导航栏)下的视觉可靠性。技术价值体现在提升交互可预测性、视觉连贯性与跨设备兼容性;典型应用场景包括电商锚点导航、SaaS表单引导、长文档阅读器及多语言页面跳转。本文聚焦scroll behavior consistency与anchor alignment reliability两 阅读详情
全面考察“禁用浏览器后退按钮”


    
  
  浏览器的后退按钮使得我们能够方便地返回以前访问过的页面,它无疑非常有用。但有时候我们不得不关闭这个功能,以防止用户打乱预定的页面访问次序。本文介绍网络上可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适用场合。
  
  一、概述
     曾经有许多人问起,“怎样才能‘禁用’浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏览过的页面?”在ASP论坛上,这个问题也是问得最多的问题之一。遗憾的是,答案非常简单:我们无法禁用浏览器的后退按钮。
  
     起先我对于居然有人想要禁用浏览器的后退按钮感到不可思议。后来,看到竟然有那么多的人想要禁用这个后退按钮,我也就释然(想要禁用的只有后退按钮,不包括浏览器的前进按钮)。因为在默认情况下,用户提交表单之后可以通过后退按钮返回表单页面(而不是使用“编辑”按钮!),然后再次编辑并提交表单向数据库插入新的记录。这是我们不愿看到的。
  
     因此我就决定要找出避免出现这种情况的方法。我访问了许多网站,参考了这些网站所介绍的各种实现方法。如果你经常访问ASP编程网站,本文所介绍的部分内容你可能已经见到过。本文的任务是把各种可能的方法都介绍给大家,然后找出最好的方法!
  
  二、禁止缓存
  
     在我找到的许多方案中,其中有一种建议禁止页面缓存。具体是使用服务器端脚本,如下所示:
  
  
  
  <%
  
  Response.Buffer = True
  
  Response.ExpiresAbsolute = Now() - 1
  
  Response.Expires = 0
  
  Response.CacheControl = "no-cache"
  
  %>
  
  
  
  
  
     这种方法非常有效!它强制浏览器重新访问服务器下载页面,而不是从缓存读取页面。使用这种方法时,编程者的主要任务是创建一个会话级的变量,通过这个变量确定用户是否仍旧可以查看那个不适合通过后退按钮访问的页面。由于浏览器不再缓存这个页面,当用户点击后退按钮时浏览器将重新下载该页面,此时程序就可以检查那个会话变量,看看是否应该允许用户打开这个页面。
  
     例如,假设我们有如下表单:
  
  
  
  <%
  
  Response.Buffer = True
  
  Response.ExpiresAbsolute = Now() - 1
  
  Response.Expires = 0
  
  Response.CacheControl = "no-cache"
  
  
  
  If Len(Session("FirstTimeToPage")) > 0 then
  
  &single; 用户已经访问过当前页面,现在是再次返回访问。
  
  &single; 清除会话变量,将用户重定向到登录页面。
  
  Session("FirstTimeToPage") = ""
  
  Response.Redirect "/Bar.asp"
  
  Response.End
  
  End If
  
  
  
  &single; 如果程序运行到这里,说明用户能够查看当前页面
  
  &single; 以下开始创建表单
  
  %>
  
  
  
  <form method=post action="SomePage.asp">
  
  <input type=submit>
  
  </form>
  
  
  
  
  
     我们借助会话变量FirstTimeToPage检查用户是否是第一次访问当前页面。如果不是第一次(即Session("FirstTimeToPage")包含某个值),那么我们就清除会话变量的值,然后把用户重新定向到一个开始页面。这样,当表单提交时(此时SompePage.asp被打开),我们必须赋予FirstTimeToPage一个值。即,在SomePage.asp中我们需要加上下面的代码:
  
  
  
  Session("FirstTimeToPage") = "NO"
  
  
  
  
  
     这样,已经打开SomePage.asp的用户如果点击后退按钮,浏览器将重新请求服务器下载页面,服务器检查到Session("FirstTimeToPage")包含了一个值,于是就清除Session("FirstTimeToPage"),并把用户重定向到其他页面。当然,所有这一切都需要用户启用了Cookie,否则会话变量将是无效的。(有关该问题的更多说明,请参见For session variables to work, must the Web visitor have cookies enabled?)
  
     另外,我们也可以用客户端代码使浏览器不再缓存Web页面:
  
  
  
  <html>
  
  <head>
  
  <meta http-equiv="Expires" CONTENT="0">
  
  <meta http-equiv="Cache-Control" CONTENT="no-cache">
  
  <meta http-equiv="Pragma" CONTENT="no-cache">
  
  </head>
  
  
  
  
  
     如果使用上面的方法强制浏览器不再缓存Web页面,必须注意以下几点:
  
  
  只有在使用安全连接时“Pragma: no-cache”才防止浏览器缓存页面。对于不受安全保护的页面,“Pragma: no-cache”被视为与“Expires: -1”相同,此时浏览器仍旧缓存页面,但把页面标记为立即过期。
  在IE 4或5中,“Cache-Control”META HTTP-EQUIV标记将被忽略,不起作用。
     在实际应用中我们可以加上所有这些代码。然而,由于这种方法不能适用于所有的浏览器,所以是不推荐使用的。但如果是在Intranet环境下,管理员可以控制用户使用哪种浏览器,我想还是有人会使用这种方法。
  
  三、其他方法
  
     接下来我们要讨论的方法以后退按钮本身为中心,而不是浏览器缓存。这儿有一篇文章Rewiring the Back Button很值得参考。不过我注意到,如果使用这种方法,虽然用户点击一下后退按钮时他不会看到以前输入数据的页面,但只要点击两次就可以,这可不是我们希望的效果,因为很多时候,固执的用户总是能够找到绕过预防措施的办法。
  
     另外一种禁用后退按钮的办法是用客户端JavaScript打开一个没有工具条的窗口,这使得用户很难返回前一页面,但不是不可能。一种更安全但相当恼人的方法是,当表单提交时打开一个新的窗口,与此同时关闭表单所在的窗口。但我觉得这种方法不值得认真考虑,因为我们总不能让用户每提交一个表单就打开一个新窗口。
  
     那么,在那个我们不想让用户返回的页面是否也可以加入JavaScript代码呢?在这个页面中加入的JavaScript代码可用来产生点击前进按钮的效果,这样也就抵消了用户点击后退按钮所产生的动作。用于实现该功能的JavaScript代码如下所示:
  
  
  
  <script language="JavaScript">
  
  <!--
  
  javascript:window.history.forward(1);
  
  //-->
  
  </script>
  
  
  
  
  
     同样地,这种方法虽然有效,但距离“最好的方法”还差得很远。后来我又看到有人建议用location.replace从一个页面转到另一个页面。这种方法的原理是,用新页面的URL替换当前的历史纪录,这样浏览历史记录中就只有一个页面,后退按钮永远不会变为可用。我想这可能正是许多人所寻求的方法,但这种方法仍旧不是任何情况下的最好方法。使用这种方法的实例如下所示:
  
  
  
  <A HREF="PageName.htm" onclick="javascript:location.replace(this.href);
  
  event.returnValue=false; ">
  
  禁止后退到本页面的链接</A>
  
  
  
  
  
     试试下面这个链接:
  
     禁止后退到本页面的链接!
  
     这种方法的缺点在于:简单地运用Response.Redirect将不再有效,这是因为每次用户从一个页面转到另一个页面,我们都必须用客户端代码清除location.history。另外还要注意,这种方法清除的是最后一个访问历史记录,而不是全部的访问记录。
  
     点击上面的链接,你将打开一个简单的HTML页面。再点击后退按钮,你可以看到这时打开的不是本页面,而是本页面之前的页面!(当然,你必须在浏览器中启用了客户端JavaScript代码。)
  
     经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所有这里介绍的方法都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限。由于不存在能够完全禁用后退按钮的方法,所以最好的方案应该是:混合运用客户端脚本和服务器端脚本。
  
用 opacity 实现高性能可访问模态框的完整实践 模态框(Modal)是 Web 交互中高频使用的复合组件,其本质是控制元素视觉显隐与用户焦点流的协同机制。传统 display: none 触发重排重绘,影响性能与可访问性;而 opacity 仅触发合成层更新,具备硬件加速、状态解耦和无障碍兼容三大技术优势。结合 visibility: hidden 和 pointer-events: none 可构建零闪烁、可聚焦、可键盘导航的稳定方案。该方法广泛适用于 Vue/React 状态管理、金融后台、政府服务平台等对性能与合规性要求严苛的工程场景,是现代前端实 阅读详情

相关推荐

React特殊分页实战:状态管理、游标分页与无限滚动降级方案

分页是Web应用中最基础却最易被低估的技术模块,其本质是客户端状态、服务端数据策略与用户交互预期的三重对齐。从offset/limit到cursor-based分页,原理差异决定架构选型;而React的声明式更新特性,既带来状态可预测性,也放大了竞态请求、滚动位置丢失、筛选条件耦合等工程风险。技术价值在于通过useReducer统一状态机、React Query实现请求-缓存协同、IntersectionObserver优化无限滚动性能,并借助startTransition平衡加载响应与用户体验。典型应用场

cqbh2011的博客 477

IE浏览器按Backspace返回上一页面

现象:在编辑页面输入框出错时,按Backspace退格键,并未删除错误文字,页面返回上一页面。 原因:IE浏览器启用的快捷键。 解决方法:在页面/所有加速器/管理加速器打开的页面中,将所有的加速器状态设置为“禁用”即可(ps:罪魁祸首是电子邮件的加速器,但为安全起见,全部禁用)。

DAO的博客 1万+

大厂Python自动化测试面试题合集

题目:函数的作用是什么?调用函数的语法?答案:将独立功能代码封装成模块,复用代码;函数名(实参)。题目:函数 return 作用是什么?无 return 时函数返回什么?多返回值底层是什么类型?答案:返回函数执行结果;无 return 默认返回 None;return x,y,z 底层自动封装为元组。题目:函数四大参数类型分别是什么?定义顺序要求?答案:必选参数、默认参数、可变位置 * args、命名关键字、可变关键字 **kwargs;顺序:必选→默认→*args→命名关键字→**kwargs。

悦分享 104

ASP.NET中如何阻止后退按钮回到前一个页面

在如题中所提到的前一个页面的page_load事件里加上如下两句:Response.Cache.SetNoStore();    //设置Cache-Control: no-store HTTP标头Response.Cache.SetNoServerCaching();    //停止当前响应的所有源服务器缓存当你单击注销按钮时,如回到登录页,再单击后退按钮时即会失效. 

瀻ミ每羏-┢┦aPpY . 2423

从零开始:用Python搭建你的第一个加密货币量化交易机器人(附完整代码)

本文详细介绍了如何使用Python从零开始搭建一个加密货币量化交易机器人,涵盖环境准备、交易所API连接、基础交易策略实现、回测系统构建以及实盘部署等关键步骤。通过完整的代码示例,帮助读者快速掌握数字货币量化交易的核心技术,适合有一定编程基础的投资者入门。

weixin_30415113的博客 465

Keil5编译报错:ARM Compiler Version 5缺失的完整解决方案

本文提供了Keil5编译报错“ARM Compiler Version 5缺失”的完整解决方案。详细介绍了手动安装ARM Compiler Version 5的步骤,包括下载安装包、配置编译器路径及常见问题排查,帮助开发者快速恢复老项目的编译环境。

bb456的博客 945

asp.net中屏蔽后退键!

<br /> <script language="JavaScript" type="text/javascript"> <br />   window.history.forward(1); <br />   </script> <br /> <br /> <br />  <script language="javascript" type="text/javascript"> <br />  <br /><br /> if(event.keyCode==13 && event.srcElement.ty

沈宫新的专栏 2056

(Linux)DHCP 超级作用域和中继代理(超难受做了超久)

DHCP服务器在192.168.159.0 可以实现分配IP的功能,现在要跨网段分配IP 就需要用到DHCP中继代理。中继代理有两张网卡分别eth0:IP 192.168.159.2 ;eth1: IP:192.168.200.2 。现在要实现192.168.200.0网段的客户机可以获取DHCP服务器的IP。中继代理其实是相当于一个路由器的作用 DHCP服务器的IP地址 :192.168.159...

DJ_joker的博客 2225

asp按钮跳转页面代码_如何防止页面后退,使浏览器后退按钮失效

  原理:用新页面的URL替换当前的历史纪录,这样浏览历史记录中就只有一个页面,后退按钮永远失效。     注:history.go和history.back(包括用户按浏览器历史前进后退按钮)触发,       页面由于使用pushState修改了history),会触发popstate事件。 【代码如下】 注:直接放在不想后退跳转的页面即可!  方法一: <s...

weixin_39695701的博客 428

【STM32】R05D电控红外协议的美的空调遥控器

目录一、设计思路一、R05D红外协议原理1.协议手册理解2.验证时序(重点)二、硬件实现1.需要的材料2.对发射模块电路进行修改3.STM32 GPIO选择三、代码实现1.载波38kHZ实现2.R05D时序实现3.调用函数并验证 一、设计思路 通常红外遥控采用NEC传输协议,而美的空调采用的是R05D红外协议(应该是自己设计的协议),因此用一般红外编码发射模块无法直接对空调进行控制。 解决方法:获取R05D协议手册 + 用红外接收管对原有遥控器红外接收进行波形分析。 一、R05D红外协议原理 R05D电控功

weixin_42204837的博客 1万+

IP-guard发布新版本4.87.2241.0

IP-guard发布了新版本4.87.2241.0,用户可通过提供的下载地址获取完整安装包和升级包。下载后,用户需联系厂家申请测试序列号以进行安装和使用。IP-guard是一款专注于企业文件加密、文档加密系统、防泄密软件、数据安全的软件。

IP-Guard专栏 1531

全面考察“禁用浏览器后退按钮

浏览器的后退按钮使得我们能够方便地返回以前访问过的页面,它无疑非常有用。但有时候我们不得不关闭这个功能,以防止用户打乱预定的页面访问次序。本文介绍网络上可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适用场合。 一、概述    曾经有许多人问起,“怎样才能‘禁用’浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏览过的页面?”在ASP论坛上,这个问

410

SCADA|KIO程序导出变量错误处理办法

雷工在使用KingSCADA3.52软件导出KIO变量时,遇到导出Excel格式文件报错的问题,错误提示为“ADODB.Connection未找到提供程序”。经过咨询技术人员,发现该功能需要安装Office软件,并与已安装的WPS软件兼容。雷工随后安装了Office2021版本,并进行了兼容性设置。安装过程中遇到无法启动的问题,通过删除安装目录、清理注册表、使用卸载软件和重启电脑等方法解决。安装完成后,雷工在WPS中设置了与Microsoft Office2003兼容的模式,最终成功解决了导出变量时的问题。

做有价值的事,积累有价值的笔记! 957

63道jQuery面试八股文(答案、分析和深入提问)整理

可以使用jQuery通过监听键盘事件和popstate事件来禁用浏览器的前进后退按钮。} });});});</ script > </ head > < body > < h1 > 页面内容 </ h1 > < p > 这里是一些示例文本。} });});});</ script > </ head > < body > < h1 > 页面内容 </ h1 > < p > 这里是一些示例文本。} });});});

Lonelycity_zyz的博客 1006

Centos 7 Linux 离线安装单机 Kafka:下载、安装、配置、使用

本文详细介绍了在 CentOS 7 系统上离线安装单机版 Apache Kafka 的完整流程,包括环境准备(JDK 安装)、Kafka 安装包上传与解压、关键配置修改(如监听地址)、ZooKeeper 与 Kafka 服务的启动,以及 Topic 的创建、消息的生产和消费等基础操作。适用于无网络环境下的 Kafka 快速部署与学习,为后续开发或测试提供本地消息队列支持。

寒水馨 · 轻量级技术文档 · hanshuixin.org 1319

YOLOv11【第一章:零基础入门篇·第1节】YOLOv11核心架构深度解析与环境配置,一文搞定!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。 本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 5511

面试官:按 F5 刷新和在地址栏回车,浏览器的缓存策略到底有啥区别?

最近私信问我面试题的小伙伴实在太多了,一个个回有点回不过来。我花了两个周末,把星球里大家公认最容易挂的。

王中阳讲编程 706

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ASP技巧(3)

 用TDC建立自己的数据库格式较长text型数据无法在Asp页面中取出的解决办法[图文] 用ASP控制Flash计算ASP页面的载入时间页面延迟的两个简单方法将ASP生成的内容写入响应流中最有效的方法如何使用asp创建dsn?ASP中巧用Response属性清除浏览器历史记录代码怎样读取一个文本文件的内容?不离开页面刷新数据得到表中字段属性代码在红蜻蜓中实现多房间页面之间传递元素的办法转换文本为超

rzwince2的专栏 708

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

软件测试核心方法:从等价类划分到场景法的实战应用

软件测试是保障软件质量的关键工程活动,其核心在于通过系统化的方法,在有限资源下高效发现潜在缺陷。从原理层面看,测试设计方法如等价类划分和边界值分析,基于程序输入域的等价类与边界是缺陷高发区的假设,将无限测试可能收敛为有限用例,极大提升了测试效率。这些方法的技术价值在于为测试活动提供了科学、可复用的抽样策略,是构建自动化测试脚本和精准测试策略的基础。在实际应用场景中,无论是验证一个登录功能,还是测试复杂的车载软件或智能门锁业务逻辑,都需要综合运用等价类划分、边界值分析、判定表及场景法等,形成从单点输入验证到完

weixin_34345753的博客 536

通过onkeypress和onkeydown事件禁用键盘中某些键

http://zywang.iteye.com/blog/700263原文 //处理键盘事件 禁止后退键(Backspace)密码或单行、多行文本框除外 function banBackSpace(e){ var ev = e || window.event;//获取event对象 var obj = ev.target || ev.srcEle...

fuqianglovejava的博客 501

如何消除网页退回键

键盘上的backspace键(删除键),当焦点在文本框的时候会正常删除,但是当焦点不在文本框的时候就会实现回退的效果,有时候我们希望禁止这个效果,下面就是如何来实现,是在网上找到的,可参考一下。http://stackoverflow.com/questions/1495219/how-can-i-prevent-the-backspace-key-from-navigating-back

liuzijiang1123的专栏 1062
上一篇: 一个asp无组件上传的实例
下一篇: ASP+Access的安全隐患及对策
huanghai2000
博客等级 码龄24年 0粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值