当前位置: 首页 > news >正文

浏览器history操作实现一些功能

返回拦截

功能:从广告进入到落地页后,给history增加一个页面,拦截返回动作

主要用到的是h5中的history对象,使用了pushState,和replaceState来操作。

并且加入了一些条件判断,包括 history.state, history.state.page,history.state.entered。

以上这些方法可以实现按需操作history对象。

 

但history操作后,按返回按钮其实是只更新url地址,不刷新页面的,最终的刷新页面,是用 window.onpopstate 监听,

在判断条件符合后,手动去reload一次页面。

以下就是实现该功能的代码:

 1 /**
 2  * @note    从广告渠道过来后,按返回按钮时的拦截功能
 3  * @author  kangxufeng <kangxufeng@duiba.com.cn>
 4  * @create  17/08/08
 5  * @des     1.url中存在a_tuiaId时,激活拦截功能
 6  *          2.插入state:{page:'intercept'}的页面
 7  *          3.当前页面state:{page:'current'}
 8  */
 9 
10 ;
11 (function() {
12   var intercetpUrl = '/';
13 
14   $(function() {
15     if (history.pushState) {
16       // 支持pushState
17       if (!history.state) {
18         // 未插入页面
19         if (isToIntercept()) {
20           initReturn();
21         }
22       } else {
23         //已插入页面
24         window.onpopstate = function(e) {
25           if (history.state && history.state.page == 'current') {
26             location.reload();
27           } else if (history.state && history.state.page == 'intercept') {
28             if (!history.state.entered) {
29               // 未拦截
30               history.state.entered = true;
31               updateTimes(function() {
32                 location.reload();
33               });
34             } else {
35               // 已拦截
36               history.go(-1);
37             }
38           }
39         }
40       }
41     }
42 
43   })
44 
45   function initReturn() {
46     if (!history.state) {
47       var thisLocation = location.href;
48       history.replaceState({page:'intercept',entered:false},'',intercetpUrl);
49       history.pushState({page:'current'},'',thisLocation);
50     }
51     window.onpopstate = function () {
52       // location.reload();
53       if(history.state && history.state.page == 'intercept') {
54         if (!history.state.entered) {
55           // history.state.entered = true;
56           history.replaceState({page:'intercept',entered:true},'',intercetpUrl);
57           updateTimes(function() {
58             location.reload();
59           });
60         }
61       }
62     }
63   }
64 
65   function updateTimes(callback) {
66     callback & callback();
67   }
68 
69   function isToIntercept() {    
70     if (getparams('a_tuiaId')) {
71       // 存在a_tuiaId,表示从广告进来
72       return true;
73     } else {
74       return false;
75     }
76   }
77 
78   function getparams(name) {
79     var regexS = "[\\?&]" + name + "=([^&#]*)";
80     var regex = new RegExp(regexS);
81     var results = regex.exec(location.href);
82 
83     if (results === null) return "";
84     else return results[1];
85   }
86 })(Zepto);

 

返回上上个页面

功能:首页打开商品详情页B,判断售罄跳转到售罄页C,在C页面点返回时略过B直接回到首页。

B.js:

jumpToEmpty: function() {
  history.replaceState({page: 'soldout'}, '', '/item/soldOut');
  location.reload();
}

C.js:

window.onpopstate = function() {
  history.go(-1);
}

 

转载于:https://www.cnblogs.com/woodk/p/7302651.html

相关文章:

  • SVM挑战SVC 存储虚拟化市场的博弈
  • 专访英特尔(中国)开源技术中心:HTML5要如何达到原生性能
  • IOS9中出现的错误
  • Linux下获取帮助
  • IC卡和RFID卡的区别(网上说的都不准确)
  • Effective C++ 条款26
  • 文件上传利器JQuery上传插件Uploadify
  • Ubuntu菜鸟入门(六)—— 有道词典安装
  • jQuery.form开发手记
  • EF只更新变化的字段
  • OC内存管理
  • MySQL入门(二)
  • 助力合作伙伴引领“互联网+”变革 浪潮预发布高端存储
  • 七:zooKeeper开源客户端ZkClient的api测试
  • 定时任务crontab在书写时的四大坑
  • 网络传输文件的问题
  • 《Java编程思想》读书笔记-对象导论
  • angular2 简述
  • CODING 缺陷管理功能正式开始公测
  • es的写入过程
  • fetch 从初识到应用
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript函数式编程(一)
  • Javascript基础之Array数组API
  • PaddlePaddle-GitHub的正确打开姿势
  • Shadow DOM 内部构造及如何构建独立组件
  • windows下mongoDB的环境配置
  • Zepto.js源码学习之二
  • 仿天猫超市收藏抛物线动画工具库
  • 好的网址,关于.net 4.0 ,vs 2010
  • 记录:CentOS7.2配置LNMP环境记录
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 什么是Javascript函数节流?
  • 探索 JS 中的模块化
  • 微信小程序开发问题汇总
  • 新手搭建网站的主要流程
  • ionic入门之数据绑定显示-1
  • MyCAT水平分库
  • ​Python 3 新特性:类型注解
  • ​油烟净化器电源安全,保障健康餐饮生活
  • # centos7下FFmpeg环境部署记录
  • $GOPATH/go.mod exists but should not goland
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (排序详解之 堆排序)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (转)自己动手搭建Nginx+memcache+xdebug+php运行环境绿色版 For windows版
  • (转载)从 Java 代码到 Java 堆
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net php 通信,flash与asp/php/asp.net通信的方法