`

禁用IE后退键

 
阅读更多
浏览器的后退按钮使得我们能够方便地返回以前访问过的页面,它无疑非常有用。但有时候我们不得不关闭这个功能,以防止用户打乱预定的页面访问次序。本文介绍网络上可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适用场合。
        一、概述    
             曾经有许多人问起,“怎样才能‘禁用’浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏览过的页面?”我访问了许多网站,参考了这些网站所介绍的各种实现方法。如果你经常访问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                
        "用户已经访问过当前页面,现在是再次返回访问。                
        "清除会话变量,将用户重定向到登录页面。                
        Session( "FirstTimeToPage ")   =   " "                
        Response.Redirect   "/Bar.asp "                
        Response.End                
End   If              
        "如果程序运行到这里,说明用户能够查看当前页面    
        "以下开始创建表单                
%>          
        <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,否则会话变量将是无效的。            
             另外,我们也可以用客户端代码使浏览器不再缓存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;   ">      
        禁止后退到本页面的链接                          
             试试下面这个链接:                
             禁止后退到本页面的链接!                
             这种方法的缺点在于:简单地运用Response.Redirect将不再有效,这是因为每次用户从一个页面转到另一个页面,我们都必须用客户端代码清除location.history。另外还要注意,这种方法清除的是最后一个访问历史记录,而不是全部的访问记录。                
             点击上面的链接,你将打开一个简单的HTML页面。再点击后退按钮,你可以看到这时打开的不是本页面,而是本页面之前的页面!(当然,你必须在浏览器中启用了客户端JavaScript代码。)                
             经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所有这里介绍的方法都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限。由于不存在能够完全禁用后退按钮的方法,所以最好的方案应该是:混合运用客户端脚本和服务器端脚本。
分享到:
评论

相关推荐

    使用jquery实现IE下按backspace相当于返回操作

    其实说禁用也不是完全禁用,后退键在各浏览器下默认为点击了一下后退按钮,只要保证正常的文字录入还可以用,其他情况下的退格键一律禁掉。看jquery实现代码吧: 代码如下: $(function(){ function dokey(event){ ...

    JavaScript如何禁止Backspace键

    就会跳转到上一个页面,效果就像点击了浏览器的后退按钮返回前一个页面一样,而在火狐和google下没有这样的问题出现,为了解决这个问题,写了一个如下的处理方法,如果文本框是只读的,那么就禁用Backspace键。...

    JavaScript屏蔽Backspace键的实现代码

    就会跳转到上一个页面,效果就像点击了浏览器的后退按钮返回前一个页面一样,而在火狐和google下没有这样的问题出现,为了解决这个问题,写了一个如下的处理方法,如果文本框是只读的,那么就禁用Backspace键。...

    web本地视频播放器源码

    2,按空格,上下左右,实现视频暂停,音量加减,视频前进后退(除此在网页内禁用除了f5 f12 及视频操作键以外的键) 3,禁用鼠标在video时的滑轮事件改为音量 4,用input type=“file” 获取文件地址。可以上传多...

    精易模块v8.2.0[源码].e

    6、新增“系统_禁用文件系统重定向”,禁用调用线程的文件系统重定向,默认情况下启用文件系统重定向。此功能对于想要访问本机system32目录的32位应用程序很有用; 7、新增“系统_恢复文件系统重定向”,恢复调用...

    易语言辅助模块

    子程序 禁止窗口组建, 逻辑型, 公开, 在指定的窗口或窗口组建里允许或禁止所有鼠标及键盘输入,成功返回(真),失败返回(假) .参数 句柄, 整数型, , 窗口句柄或组建句柄 .参数 类型, 整数型, , 0=禁止,1=允许 .子...

    《程序天下:JavaScript实例自学手册》光盘源码

    7.1 按功能键返回首页 7.2 回车实现Tab键功能 7.3 Ctrl+Enter提交数据 7.4 IE中屏蔽退格建(Back Space) 7.5 屏蔽键盘所有键 7.6 JavaScript捕获方向键 7.7 状态栏变化信息 7.8 状态栏的跑马灯效果 7.9 状态栏缩放...

    程序天下:JavaScript实例自学手册

    7.1 按功能键返回首页 7.2 回车实现Tab键功能 7.3 Ctrl+Enter提交数据 7.4 IE中屏蔽退格建(Back Space) 7.5 屏蔽键盘所有键 7.6 JavaScript捕获方向键 7.7 状态栏变化信息 7.8 状态栏的跑马灯效果 7.9 状态栏缩放...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 -增加...

    EditPlus 3.31 Build 860 简体中文版

    IE 3.0 以上版本,它还会结合 IE 浏览器于 EditPlus 窗口中,让你可以直接预览编辑好的网页 (若没安装 IE,也可指定浏览器路径)。 EditPlus 3.31.860 (2011-08-08) &lt;功能&gt; * 默认支持 Python/Ruby on Rails 语法加...

    EditPlus 3.31 Build 1129

    IE 3.0 以上版本,它还会结合 IE 浏览器于 EditPlus 窗口中,让你可以直接预览编辑好的网页 (若没安装 IE,也可指定浏览器路径)。 EditPlus 3.31.1129 (2011-11-17) 更新未知 EditPlus 3.31.976 (2011-09-21) ...

    ExtAspNet_v2.3.2_dll

    -修正DatePicker中的一个bug(31/01/2010将会返回NULL)使用DateFormatString来生成SelectedDate属性(feedback:OktaEndy)。 -修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的Text,则...

    精易模块V8.2.0 发布【2020.05.01】-易语言

    6、新增“系统_禁用文件系统重定向”,禁用调用线程的文件系统重定向,默认情况下启用文件系统重定向。此功能对于想要访问本机system32目录的32位应用程序很有用; 7、新增“系统_恢复文件系统重定向”,恢复调用...

    易语言精易模块V8.2.0下载地址

    6、新增“系统_禁用文件系统重定向”,禁用调用线程的文件系统重定向,默认情况下启用文件系统重定向。此功能对于想要访问本机system32目录的32位应用程序很有用; 7、新增“系统_恢复文件系统重定向”,恢复调用...

    易语言-精易模块【源码】[v8.2.0]

    6、新增“系统_禁用文件系统重定向”,禁用调用线程的文件系统重定向,默认情况下启用文件系统重定向。此功能对于想要访问本机system32目录的32位应用程序很有用; 7、新增“系统_恢复文件系统重定向”,恢复调用...

    EXCEL集成工具箱V8.0完整增强版(精简)

    EXCEL集成工具箱V8.0 多国语言版(2003-2010通用)增强版! * 软件大小: 22.90MB * 软件授权: 免费共享软件 * 软件语言: 多国语言[中文繁体/简体/英文] * 开 发 商: 创思维软件工作室 * 更新时间: 2010-09-22...

    EXCEL集成工具箱V6.0

    Excel集成工具箱6.0是利用VBA(Visual Basic for Applications)语言编写的增强应用型插件。包括160个菜单功能和100个左右 自定义函数,集160个工具于一身,但体积小于15MB。当安装集成工具箱后,如果您使用Excel ...

Global site tag (gtag.js) - Google Analytics