`
cuiyadll
  • 浏览: 204887 次
文章分类
社区版块
存档分类
最新评论

JS清除网页历史记录,屏蔽后退按钮

阅读更多

浏览器的后退按钮使得我们能够方便地返回以前访问过的页面,它无疑非常有用。但有时候我们不得不关闭这个功能,以 防止用户打乱预定的页面访问次序。


本文介绍网络上可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适
用场合。

一、概述
曾经有许多人问起,“怎样才能‘禁用’浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏
览过的页面?”在ASP论坛上,这个问题也是问得最多的问题之一。遗憾的是,答案非常简单:我们无法禁用浏览器的后退
按钮。

起先我对于居然有人想要禁用浏览器的后退按钮感到不可思议。后来,看到竟然有那么多的人想要禁用这个后退按
钮,我也就释然(想要禁用的只有后退按钮,不包括浏览器的前进按钮)。因为在默认情况下,用户提交表单之后可以通
过后退按钮返回表单页面(而不是使用“编辑”按钮!),然后再次编辑并提交表单向数据库插入新的记录。这是我们不
愿看到的。

因此我就决定要找出避免出现这种情况的方法。我访问了许多网站,参考了这些网站所介绍的各种实现方法。如果你
经常访问ASP编程网站,本文所介绍的部分内容你可能已经见到过。本文的任务是把各种可能的方法都介绍给大家,然后找
出最好的方法!

二、禁止缓存
在我找到的许多方案中,其中有一种建议禁止页面缓存。具体是使用服务器端脚本,如下所示:
 
代码如下:

  1. <%
  2. Response.Buffer = True
  3. Response.ExpiresAbsolute = Now() – 1
  4. Response.Expires = 0
  5. Response.CacheControl = “no-cache”
  6. %>
  7. 这种方法非常有效!它强制浏览器重新访问服务器下载页面,而不是从缓存读取页面。使用这种方法时,编程者的主
  8. 要任务是创建一个会话级的变量,通过这个变量确定用户是否仍旧可以查看那个不适合通过后退按钮访问的页面。由于浏
  9. 览器不再缓存这个页面,当用户点击后退按钮时浏览器将重新下载该页面,此时程序就可以检查那个会话变量,看看是否
  10. 应该允许用户打开这个页面。
  11. 例如,假设我们有如下表单:
  12. 复制代码 代码如下:
  13. <%
  14. Response.Buffer = True
  15. Response.ExpiresAbsolute = Now() – 1
  16. Response.Expires = 0
  17. Response.CacheControl = “no-cache”
  18. If Len(Session(“FirstTimeToPage”)) > 0 then
  19. &single; 用户已经访问过当前页面,现在是再次返回访问。
  20. &single; 清除会话变量,将用户重定向到登录页面。
  21. Session(“FirstTimeToPage”) = “”
  22. Response.Redirect “/Bar.asp”
  23. Response.End
  24. End If
  25. &single; 如果程序运行到这里,说明用户能够查看当前页面
  26. &single; 以下开始创建表单
  27. %>
  28. <form method=post action=”SomePage.asp”>
  29. <input type=submit>
  30. </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页面:


代码如下:

  1. <html>
  2. <head>
  3. <meta http-equiv=”Expires” CONTENT=”0″>
  4. <meta http-equiv=”Cache-Control” CONTENT=”no-cache”>
  5. <meta http-equiv=”Pragma” CONTENT=”no-cache”>
  6. </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代码如下
所示:


代码如下:

  1. <script language=”JavaScript”>
  2. <!–
  3. javascript:window.history.forward(1);
  4. //–>
  5. </script>
复制代码


同样地,这种方法虽然有效,但距离“最好的方法”还差得很远。后来我又看到有人建议用location.replace从一个
页面转到另一个页面。这种方法的原理是,用新页面的URL替换当前的历史纪录,这样浏览历史记录中就只有一个页面,后
退按钮永远不会变为可用。我想这可能正是许多人所寻求的方法,但这种方法仍旧不是任何情况下的最好方法。使用这种

方法的实例如下所示:

  1. <A HREF=”PageName.htm” onclick=”javascript:location.replace(this.href);
  2. event.returnValue=false; “>
  3. 禁止后退到本页面的链接</A>
复制代码


试试下面这个链接:
禁止后退到本页面的链接!
这种方法的缺点在于:简单地运用Response.Redirect将不再有效,这是因为每次用户从一个页面转到另一个页面,
我们都必须用客户端代码清除location.history。另外还要注意,这种方法清除的是最后一个访问历史记录,而不是全部
的访问记录。

点击上面的链接,你将打开一个简单的HTML页面。再点击后退按钮,你可以看到这时打开的不是本页面,而是本页面
之前的页面!(当然,你必须在浏览器中启用了客户端JavaScript代码。)
经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所有这里介绍的方法
都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限。由于不存在能够完全禁用后退按钮
的方法,所以最好的方案应该是:混合运用客户端脚本和服务器端脚本


原文http://luckystar2008.iteye.com/blog/1908640

 

同事找到的方法:

function prevButtonResetUrl(btnId) {

if (window.history && window.history.pushState) {

$(window).on('popstate', function () {

$('#' + btnId).click();

});

}

window.history.pushState('forward', null, '#'); //在IE中必须得有这两行

window.history.forward(1);

 

};

分享到:
评论

相关推荐

    后退、刷新、前进按钮.rar

    在网页浏览过程中,"后退"、"刷新"和"前进"按钮是用户与浏览器交互的重要元素,它们提供了方便快捷的方式,帮助用户在浏览历史中导航。这些功能主要由JavaScript(JS)进行实现,特别是在创建自定义交互效果时。本文...

    新版ThinkPHP微信屏蔽投诉按钮域名防封源码 带搭建教程

    thinkphp框架开发屏蔽举报按钮代码,完全开源无加密,代码核心主要是屏蔽微信投诉按钮技术,全面兼容新(安卓/苹果)系统的微信app,也是市面上较新的微信域名防封技术之一 现在市面上都是一个JS和一个php文件的...

    javascript经典特效---前进后退按钮.rar

    在网页浏览过程中,浏览器自带的前进和后退按钮允许用户方便地在历史浏览记录中穿梭。但是,有时候开发者可能需要自定义这些功能,以满足特定的交互需求。例如,用户可能在一个复杂的表单中操作,点击“后退”按钮时...

    清除文本框上次输入值的历史记录

    本篇将详细介绍如何清除文本框上次输入值的历史记录,主要涉及Web应用和桌面应用两种场景。 1. Web应用中的清除策略 对于基于HTML的Web应用,文本框的历史记录通常与浏览器的自动填充功能有关。开发者可以通过以下...

    AJAX下保存浏览器历史记录

    然而,传统的浏览器历史记录机制并不支持AJAX请求导致的局部页面更新,这使得用户在使用前进和后退按钮时可能会遇到问题。为了解决这个问题,开发人员引入了“保存浏览器历史记录”的概念,如“RSH(Replace State ...

    如何使用js禁用前进和后退按钮

    总的来说,禁用JavaScript中的前进和后退按钮涉及到对浏览器历史记录的管理和事件监听。通过巧妙地使用`history.pushState()`、`popstate`和`hashchange`事件,可以实现这种控制,但应谨慎使用,以免破坏用户的正常...

    在vue中阻止浏览器后退的实例

    当这个方法被调用时,浏览器会向新的历史记录项导航,这样用户在点击后退按钮时,就会导航到上一条历史记录。为了阻止后退操作,我们需要监听`popstate`事件,并在事件发生时重新使用`pushState`方法将当前页面的URL...

    页面禁止各种浏览器后退.txt

    在这个函数中,使用`pushState`方法添加一个新的历史记录,以覆盖用户试图返回的状态,并使用`forward`方法确保用户无法通过浏览器的后退按钮回到前一个状态。 3. **兼容不支持HTML5 History API的浏览器**:对于不...

    JS网页屏蔽右键代码.txt

    标题与描述均提到了“JS网页屏蔽右键代码”,这主要涉及到的是JavaScript在网页开发中的应用,特别是如何通过JavaScript阻止用户在网页上进行右键点击、复制、粘贴等操作,以此来保护网页内容不被轻易复制或查看源...

    Thinkphp内核微信屏蔽投诉按钮源码,微信域名防封+搭建教程.zip

    【标题】"Thinkphp内核微信屏蔽投诉按钮源码,微信域名防封+搭建教程" 涉及的核心知识点主要集中在两个方面:1) ThinkPHP框架的使用,2) 微信平台的域名防封技术和投诉按钮的屏蔽策略。 1) ThinkPHP框架:这是一个...

    ajax无刷新页面切换,历史记录后退前进解决方案.docx

    在这种情况下,可以通过比较当前URL和目标URL来决定是否真正执行`pushState()`,或者在用户后退时清除不需要的记录。 总之,通过合理利用`history`对象的API,我们可以实现Ajax无刷新页面切换的同时,确保浏览器的...

    javascript屏蔽返回

    JavaScript屏蔽返回功能通常涉及到网页的导航控制,这是前端开发中的一种常见需求,特别是在单页应用(SPA)中。在浏览器环境中,用户可以通过点击浏览器的“返回”按钮来浏览历史记录,但有时候开发者可能希望阻止...

    chrome缓存清除扩展程序,通过js清除chrome缓存的api演示

    综上所述,通过创建一个Chrome扩展并利用`chrome.browsingData.remove` API,我们可以方便地实现JavaScript清除Chrome缓存的功能。这个扩展可以帮助开发者在调试过程中快速清空缓存,也可以供用户根据需要清理个人...

    Qt QWebview调用JS,实现QQ邮箱自动填写输入框,模拟鼠标点击网页按钮!!

    本篇文章将详细探讨如何利用Qt的QWebView组件与JavaScript交互,实现如标题所述的“QQ邮箱自动填写输入框以及模拟鼠标点击网页按钮”。 首先,QWebView是QtWebKit模块的一部分,它允许在Qt应用程序中嵌入一个Web...

    localstorage搜索框记住历史记录功能

    此外,为了提供清除历史记录的选项,可以在页面上添加一个清除按钮,关联以下事件处理程序: ```javascript function clearSearchHistory() { localStorage.removeItem('searchHistory'); // 更新UI,清空搜索...

    pdf.js使用demo(已解决隐藏打印下载等按钮)

    在这个“pdf.js 使用 demo(已解决隐藏打印下载等按钮)”中,我们主要关注的是如何定制 PDF.js 的行为,特别是如何去掉默认的打印、下载等按钮。这些功能虽然方便,但在某些情况下可能不希望用户直接访问,比如为了...

    微信小程序学习用demo:豆瓣电影:实现搜索历史记录

    5. 数据管理:在页面的JS文件中,我们需要维护一个数据对象,比如`data.searchHistory`,保存搜索历史记录。当用户进行新的搜索时,更新这个数据并同步到本地存储。 6. 状态管理:若要实现搜索历史记录的持久化,...

    JS制作的返回网页顶部按钮代码

    JavaScript(简称JS)是一种轻量级的解释型编程语言,广泛应用于网页和网络应用开发,包括用户交互、网页动画、动态内容以及与服务器的通信等多个方面。在这个特定的知识点中,我们将讨论如何使用JS来创建一个返回...

    js手机弹出按钮 弧形按钮

    本教程将详细讲解如何利用JavaScript(JS)创建一个适用于手机的弧形弹出按钮,以及如何通过参数设置来实现个性化定制。 首先,我们需要了解JavaScript在Web开发中的基础作用。JavaScript是一种广泛使用的编程语言...

    web页面js屏蔽地区代码实例

    web页面js屏蔽地区代码实例,主要用于防止某个地区访问该web页面

Global site tag (gtag.js) - Google Analytics