浅谈通过JS拦截 pushState和replaceState事件


Posted in Javascript onJuly 21, 2017

history.pushState 和 history.replaceState 可以在不刷新当前页面的情况下更改URL,但是这样就无法获取通过AJAX得到的新页面的内容了。

虽然各种HTML5文档说 window.onpopstate 事件可以拦截 pushState 的消息,但在实际的测试中, onpopstate 根本没有任何作用,无法拦截 pushState 的消息。

经过Google一番,才找到了正确获取 pushState 事件的代码

https://stackoverflow.com/a/25673911

// Add this:
var _wr = function(type) {
  var orig = history[type];
  return function() {
    var rv = orig.apply(this, arguments);
    var e = new Event(type);
    e.arguments = arguments;
    window.dispatchEvent(e);
    return rv;
  };
};
history.pushState = _wr('pushState');
history.replaceState = _wr('replaceState');

// Use it like this:
window.addEventListener('pushState', function(e) {
  console.warn('THEY DID IT AGAIN!');
});
window.addEventListener('replaceState', function(e) {
  console.warn('THEY DID IT AGAIN!');
});

这段代码改写了 history 中原来的函数,然后自己激活一个事件

这样就可以解决 pushState 无法激活事件的问题了

另外记得最好将这段代码放在文档加载前执行

以上这篇浅谈通过JS拦截 pushState和replaceState事件就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQUBar 基于JQUERY的柱状图插件
Nov 23 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
Sep 01 Javascript
删除javascript所创建子节点的方法
May 21 Javascript
基于javascript实现tab选项卡切换特效调试笔记
Mar 30 Javascript
DWR中各种java方法的调用
May 04 Javascript
AngularJS中指令的四种基本形式实例分析
Nov 22 Javascript
深入理解JS继承和原型链的问题
Dec 17 Javascript
前端编码规范(3)JavaScript 开发规范
Jan 21 Javascript
Vue实现动态响应数据变化
Apr 28 Javascript
通过一个简单的例子学会vuex与模块化
Nov 22 Javascript
js prototype深入理解及应用实例分析
Nov 25 Javascript
JavaScript实现模态对话框实例
Jan 13 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
Jul 20 #Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
Jul 20 #Javascript
微信小程序获取微信运动步数的实例代码
Jul 20 #Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
Jul 20 #Javascript
angular动态删除ng-repaeat添加的dom节点的方法
Jul 20 #Javascript
如何使用JS在HTML中自定义字符串格式化
Jul 20 #Javascript
详解用webpack把我们的业务模块分开打包的方法
Jul 20 #Javascript
You might like
在windows iis5下安装php4.0+mysql之我见
2006/10/09 PHP
PHP Pear 安装及使用
2009/03/19 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
提高php编程效率技巧
2015/08/13 PHP
javascript实现网页字符定位的方法
2015/07/14 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
最全面的JS倒计时代码
2016/09/17 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
创建简单的node服务器实例(分享)
2017/06/23 Javascript
jQuery初级教程之网站品牌列表效果
2017/08/02 jQuery
Vue.js组件通信的几种姿势
2017/10/23 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
js+css实现红包雨效果
2018/07/12 Javascript
js 解析 JSON 数据简单示例
2020/04/21 Javascript
js实现简单音乐播放器
2020/06/30 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
Python操作Excel之xlsx文件
2017/03/24 Python
python正则实现提取电话功能
2018/02/24 Python
python让列表倒序输出的实例
2018/06/25 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
Python3.0 实现决策树算法的流程
2019/08/08 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
Python 中@property的用法详解
2020/01/15 Python
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
存储过程的优缺点是什么
2015/01/10 面试题
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
土地转让协议书
2014/09/27 职场文书
教师节随笔
2015/08/15 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书
Python装饰器的练习题
2021/11/23 Python