浅谈通过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 相关文章推荐
jquery中获取元素的几种方式小结
Jul 05 Javascript
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
Aug 13 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
Jun 05 Javascript
JavaScript中的Function函数
Aug 27 Javascript
AngularJS中的Directive自定义一个表格
Jan 25 Javascript
jQuery EasyUI Draggable拖动组件
Mar 01 Javascript
jQuery 实现图片的依次加载图片功能
Jul 06 jQuery
JS解决IOS中拍照图片预览旋转90度BUG的问题
Sep 13 Javascript
使用webpack打包koa2 框架app
Feb 02 Javascript
electron demo项目npm install安装失败的解决方法
Feb 06 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
Mar 17 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
Oct 26 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
用PHP实现小型站点广告管理
2006/10/09 PHP
不错的一篇面向对象的PHP开发模式(简写版)
2007/03/15 PHP
php 什么是PEAR?(第三篇)
2009/03/19 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
2017/06/06 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
[54:08]LGD女子刀塔学院 DOTA2炼金术士教学
2014/01/09 DOTA
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
python用fsolve、leastsq对非线性方程组求解
2018/12/15 Python
python识别图像并提取文字的实现方法
2019/06/28 Python
python Django编写接口并用Jmeter测试的方法
2019/07/31 Python
pandas的排序和排名的具体使用
2019/07/31 Python
Python zip函数打包元素实例解析
2019/12/11 Python
python爬虫中PhantomJS加载页面的实例方法
2020/11/12 Python
德国PC硬件网站:CASEKING
2016/10/20 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
巧克力蛋糕店创业计划书
2014/01/14 职场文书
社保委托书怎么写
2014/08/02 职场文书
毕业证明书
2015/06/19 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
Springboot集成kafka高级应用实战分享
2022/08/14 Java/Android