页面回退,显示“网页已过期”的一种处理方法

1.问题背景

  假设页面A,以表单的形式提交数据给页面B。也就是说B页是根据A页提交上来的值生成的。然后又从B页面t访问C页面。这时如果从C页面点浏览器的“返回”按钮,会提示B页的网页已过期。

   一个简单的示例:比如A页面里面有文本框/下拉框等。还有一个提交按钮,提交的数据会在A页面嵌入的iframe(B页面)显示。B里面有连接去访问C页面。

2.原因

       提交后表单上的数据不会被浏览器的缓存保存;

     当点击返回按钮时,已经没有A中表单提交的数据。

3.处理方法

   1.在C中添加一个返回按钮,通过它能成功返回到B页面;

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

   先来实现第一个。

   从原因我们知道,返回后显示“网页已过期”的最关键的原因是从A提交的数据没有被浏览器缓存保存。所以在B页面可以尝试保存从A提交过来的数据。然后在C页面能够取到,并且将这些数据提交能B页面的链接地址。因为B页面是A页面嵌入的iframe。所以再将这个链接地址赋给这个iframe的src就可以实现从C页返回到B页。

   现在假设从A通过表单提交过来三个参数start、end、num。

  首先在B页获取这三个参数:   

<%
        String start = request.getParameter("start");
	String end = request.getParameter("end");
	String num = request.getParameter("num");
%>
 要在C页面还能获取到,可以将它们保存到cookie上:

<script type="text/javascript">
	      addCookie("path",location.href,0);//将当前页面链接保存为path加入cookie。
	      addCookie("start",'<%=start%>',0);
	      addCookie("end",'<%=end%>',0);
	      addCookie("num",'<%=num%>',0);
	   	  
	   	  function addCookie(name,value,expiresHours){ 
          var cookieString=name+"="+value; 
            //判断是否设置过期时间 
         if(expiresHours>0){ 
         var date=new Date(); 
        date.setTime(date.getTime+expiresHours*3600*1000); 
         cookieString=cookieString+"; expires="+date.toGMTString(); 
                } 
         document.cookie=cookieString; 
       
      }     
</script>
然后,在C页面通过javascript操作cookie获取到这些参数(以及B页面的链接地址);

 var startTime=getCookie("start");
    var endTime=getCookie("end");
    var num=getCookie("num");
    var path=getCookie("path");

//读取cookies
function getCookie(name)
{
    var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
    if(arr=document.cookie.match(reg))
        return (arr[2]);
    else
        return null;
}

在C页面添加按钮,点击按钮执行javascript中定义的函数将获取的链接赋值给父页面(A页面)中的iframe的src。假设iframe的id为report:

</pre><pre name="code" class="html">    <input type=button value="返回" id="back" οnclick="back()">
<pre name="code" class="html">function back(){
     window.parent.$("#bodyReport").attr("src",""+path+"?"+"start="+start+"&"+"end="+end+"&"+"num="+num);
    
      }

 
通过上面这些步骤,在C页面中点击“返回”按钮就可以成功返回到B页面了。 

但是这个时候点击浏览器的回退按钮,返回还是会在B页面显示“网页已过期”,考虑到的一种方式是将浏览器的回退按钮屏蔽。

在网上看到了一些屏蔽的方法,感兴趣的人可以参考:

http://bbs.9ria.com/thread-240607-1-1.html

自己尝试了里面的方法,可能是自己没领悟透或者操作有误,并没有实现屏蔽功能。

最后找到了一篇:

http://every-best.iteye.com/blog/841423

模仿里面的方法成功的实现了屏蔽了IE浏览器的返回按钮(只在IE浏览器上可行)

具体实现如下:添加两个文件:e.html和f.html。

e.html:

<html>
		<head>
		<!--页面本身没有多大用处,不显示。  -->
<!--只是为了屏蔽IE浏览器的回退按钮而增加的中间步骤页面-->
				<title></title>
				
		</head>
		<body>
					this is e page;
					
		</body>
		<script type="text/javascript">
			 window.location.href="f.html";
		</script>
</html>
f.html:

this is f page;....
<!--页面本身没有多大用处,不显示。  -->
<!--只是为了屏蔽IE浏览器的回退按钮而增加的中间步骤页面-->



在C页面添加一个iframe:

    <iframe id="abc" src="e.html" width="200" height="300" style="display:none"/>
<span style="font-size:18px;">这时候在C页面再去点击浏览器的返回按钮就不会尝试返回B页面,也就不会报网页已过期的错误。具体的实现原理去参考上面引用的那篇文章吧。</span>


备注:

感觉这种方法还是很粗糙,最希望还是能够实现点击浏览器的返回按钮能成功的返回B页面。希望有高手能提供!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值