首页logo
  •  

jonllen

金龙,目前就职于一家软件公司,从事Java和.Net信息安全开发设计。

个人档案

jonllen
心情闪存 | 给他留言
妮称:jonllen
来自:中国. 湖南. 湘潭
简述:金龙,目前就职于一家软件公司,从事Java和.Net信息安全开发设计。
博客日历

实现禁止掉浏览器后退的效果

分类:JavaScript

在网上搜索了很多禁止掉浏览器后退的方法,大都是说禁用缓存或使用JS跳转。其实浏览器的后退前进按钮我们本身是无法控制的,之所以还有要禁止后退的一些功能需要,主要还是存在提交表单、身份验证等应用场景,避免用户重复提交数据等。下面我从几次层面来说明实现禁止掉浏览器后退的效果。

1.客户端JS跳转

如果单只需要在客户端跳转页面,可以直接使用“location.replace('Test.aspx');”,这样页面跳转不会保留之前页面的历史记录,也没有办法后退到之前页面。但我们一般和服务器端交互都会要提交表单,会存在向服务器再POST数据请求,因此这种只使用客户端JS跳转还是不够的。

2.禁止缓存

禁止缓存的作用在于是客户端总是重新获取服务器请求,而不会加载浏览器本地缓存的副本,这在验证登录等场景是非常重要的,比如像输入的验证码,这个应该只能一次有效而不会被缓存。禁止缓存并不能禁止用户进行后退,但浏览器每次会重新请求获取后退到的页面,不再保留用户原来提交表单输入的数据,相当于重新打开页面,只要每次重新验证这样是没有问题的。如果用户尝试使用浏览器中的缓存版本提交数据,IE中会出现“网页已过期”的提示。禁止缓存的代码如下:

<!--禁止html页面缓存-->
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Expires" content="0" />

//.Net(C#)禁用后台页面浏览器缓存
Response.Buffer = true;
Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
Response.Expires = 0;
Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "No-Cache");

3.让后退停在当前页面

通过使用禁掉缓存功能,这样用户即使后退或在历史记录中点击进入到原来的页面,这样也没有问题了。当跳转到新页面时,我们还可以使用个办法让用户点后退按钮也停留在新页面,原理是在新页面打开时再自动刷新一次页面,产生一条浏览页面历史记录,这样再后退也就还是停留在新页面了,新跳转的页面增加的代码如下:

<script type="text/javascript">
var isForward = location.search.indexOf('forward=1') == -1;
if (isForward) {
location
= (location.href + (location.search.indexOf('?') == -1 ? '?' : '&') + 'forward=1');
}
//if ('<%= Request.HttpMethod %>' == 'GET')
// document.getElementById('form1').submit();
</script>

以上在IE8浏览器中测试通过,FF浏览器有点怪,新跳转的页面一定要POST提交才算到历史记录中,这样后退才能抵消停在当前页面,直接用location跳转到当前页面还不行。另外FF浏览器中的禁掉网页缓存也没用,如果从浏览历史记录中进去,还是会把原来用户输入表单值保留进来。

标签:JavaScript
  • posted@ 2013-03-31 22:54
  • update@ 2013-04-01 00:41:43
  • 阅读(8980)
  • 评论(0)

相关文章

评论
暂无任何评论。
发表评论
*必填
回复通知我
*必填