浏览器后退刷新(通过浏览器按钮)

以前做了一个手机端电商的项目,其中遇到一个问题就是浏览器后退问题,为了保证数据的及时准确,需要一个浏览器后退后之后自动刷新后退到的页面,保证页面数据的准确性。(可能数据已经被下一步修改掉了)。

需求如下:

1.html进行一系列操作之后跳转到2.html,当用户通过浏览器回退到1.html的时候,1.html需要自动刷新以便数据准确。

经过研究,发现可以通过cookie设置一个标志位来实现,具体原理如下:

1.html:判断标志位是否是false,如果是false不刷新,继续后边的代码,如果是true,那么设置为false后刷新当前页面。

2.html:设置标志位为true。

具体代码如下:

1.html:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no,initial-scale=1" />

<title>浏览器后退刷新</title>
<style type="text/css">
body {}
</style>
</head>
<body>
<h1>浏览器后退刷新1.html</h1>

<script>
function getCookie(c_name){
    if (document.cookie.length>0){  //先查询cookie是否为空,为空就return ""
      c_start=document.cookie.indexOf(c_name + "=");  //通过String对象的indexOf()来检查这个cookie是否存在,不存在就为 -1  
      if (c_start!=-1){
        c_start=c_start + c_name.length+1  //最后这个+1其实就是表示"="号啦,这样就获取到了cookie值的开始位置
        c_end=document.cookie.indexOf(";",c_start);  //其实我刚看见indexOf()第二个参数的时候猛然有点晕,后来想起来表示指定的开始索引的位置...这句是为了得到值的结束位置。因为需要考虑是否是最后一项,所以通过";"号是否存在来判断
        if (c_end==-1) c_end=document.cookie.length  
        return unescape(document.cookie.substring(c_start,c_end));  //通过substring()得到了值。想了解unescape()得先知道escape()是做什么的,都是很重要的基础,想了解的可以搜索下,在文章结尾处也会进行讲解cookie编码细节
    }
  }
  return "";
}  

function setCookie(c_name,value,expiredays)
{
var exdate=new Date()
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}

switch(getCookie("htmlMustReload")) {
case "":  //如果没有那么建立cookie
  alert("设置cookie");
  setCookie("htmlMustReload",false,99999);
  break;
case "true":  //如果设置为true,那么设置为false并重载
  alert("重新设置cookie为false,并刷新");
  setCookie("htmlMustReload",false,99999);
  window.reload();
  break;
default:
    alert("啥也没干");
  break;
}
</script>
<a href="2.html">跳转到2.html</a>
</body>
</html>

2.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no,initial-scale=1" />

<title>浏览器后退刷新2.html</title>
<style type="text/css">
body {}
</style>
</head>
<body>
<h1>浏览器后退刷新2.html,按下浏览器回退按钮会回退到1.html,并刷新1.html</h1>

<script>
function getCookie(c_name){
    if (document.cookie.length>0){  //先查询cookie是否为空,为空就return ""
      c_start=document.cookie.indexOf(c_name + "=");  //通过String对象的indexOf()来检查这个cookie是否存在,不存在就为 -1  
      if (c_start!=-1){
        c_start=c_start + c_name.length+1  //最后这个+1其实就是表示"="号啦,这样就获取到了cookie值的开始位置
        c_end=document.cookie.indexOf(";",c_start);  //其实我刚看见indexOf()第二个参数的时候猛然有点晕,后来想起来表示指定的开始索引的位置...这句是为了得到值的结束位置。因为需要考虑是否是最后一项,所以通过";"号是否存在来判断
        if (c_end==-1) c_end=document.cookie.length  
        return unescape(document.cookie.substring(c_start,c_end));  //通过substring()得到了值。想了解unescape()得先知道escape()是做什么的,都是很重要的基础,想了解的可以搜索下,在文章结尾处也会进行讲解cookie编码细节
    }
  }
  return "";
}  

function setCookie(c_name,value,expiredays)
{
var exdate=new Date()
exdate.setDate(exdate.getDate()+expiredays)
document.cookie=c_name+ "=" +escape(value)+
((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}

switch(getCookie("htmlMustReload")) {
case "":  //如果没有那么建立cookie并设置为true
  alert("设置cookie");
  setCookie("htmlMustReload",true,99999);
  break;
case "false":  //如果设置为false,那么设置为true
  alert("重新设置cookie为true,表示回退要刷新");
  setCookie("htmlMustReload",true,99999);
  break;
default:
  break;
}
</script>
</body>
</html>

这样就实现了后退刷新了。

时间: 2024-07-29 22:24:52

浏览器后退刷新(通过浏览器按钮)的相关文章

L--怎样让用户点击浏览器后退按钮刷新后退页面的验证码

介绍 项目需要,怎样让用户点击浏览器后退按钮刷新后退页面的验证码,通过cookie来解决 方法一(通过设置前台html)(失败) 本想通过控制html的http-equiv属性来解决问题,如下 http-equiv属性 1.<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80"> 和 <meta http-equiv="Content-Lan

禁用浏览器后退按钮

基本上是3个solution: 1).设置网页过期(服务器端) 2).javascript:window.history(客户端) 3).对于键盘的backspace.通过window.event来过滤,当然要考虑的是对于Input控件,要保持删除的功能. <script type="text/javascript"> function backspace() { if (event.keyCode == 8 && event.srcElement.tagN

防止页面后退(使浏览器后退按钮失效)

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

js实现浏览器后退页面刷新

最近在开发中遇到一个问题: 在一个列表页面,点击进入详情,详情页面对其状态操作,其详情页面有做修改,然后点击浏览器后退,返回到列表页,在列表页面状态还是操作之前的,为解决状态统一需要手动刷新改列表页.通过一番折腾,终于查到相关的解决方案,实现方式如下: 1.在页面中增加隐藏域  <input type="hidden" id="refreshed" value="no"> 2.通过js设置和获取隐藏域值来自动刷新页面 $(functi

javascript怎么禁用浏览器后退按钮

1. 复制代码 代码如下: <script language="JavaScript"> javascript:window.history.forward(1); </script> 利用JS产生一个“前进”的动作,以抵消后退功能,这种方法应该是最简洁的,并且不需要考虑用户连点两次或多次“后退”的情况,缺点是当用户端禁用了JavaScript之后即失效. 2. 复制代码 代码如下: <A HREF="logout.do" onclic

如何屏蔽掉浏览器后退按钮的几个解决办法

Q311 How do I disable the "Back" button of a browser? You are here: irt.org | FAQ | JavaScript | History | Q311 [ previous next ] Easy answer - you can't. Longer answer - you cannot totally remove the ability for the user to go back to the previ

浏览器后退(返回)事件捕获

有时候碰到用户喜欢点浏览器后退(返回上一页)按钮,有时候会报错,或者数据不刷新,我们可以捕获它自定义做些事情 拿好不谢 1 window.onload = function () { 2 if (typeof history.pushState === "function") { 3 history.pushState("jibberish", null, null); 4 window.onpopstate = function () { 5 history.pu

模拟浏览器后退事件

在工作中碰到一个需求:点击浏览器的后退按钮时,需要判断当前页面的表单数据是否已保存:如果没保存,就给出提示.但浏览器并没有后退事件,这个项目也没有用什么 MV** 之类的框架或库,用的是 jQuery,于是只能尝试模拟浏览器后退事件. 用的是 H5 中的 pushState 与 popstate,代码如下: var onBrowserBack = function(callback) { var userAgent = navigator.userAgent.toLowerCase(), isS

浏览器“后退”、“前进”或可以这么去监听

我们知道,浏览器实现了onbeforeunload和onunload事件,onbeforeonload事件是在浏览器即将请求下一个页面(请求还未发出)的时候触发,它可以实现阻止onunload的触发.onunload事件则是浏览器已经将下一个页面请求回来,页面即将跳转的时候触发,该事件无法中断.看起来onbeforeunload事件似乎能满足我们的需求,但是,这只是一个假象. onbeforeunload事件虽然能阻止onunload事件的触发,但是由于它是浏览器内置的事件,其出现的交互方式和U