浅谈通过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 相关文章推荐
javascript跨域刷新实现代码
Jan 01 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
Jun 24 Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 Javascript
基于jQuery实现的菜单切换效果
Oct 16 Javascript
如何利用AngularJS打造一款简单Web应用
Dec 05 Javascript
Javascript前端经典的面试题及答案
Mar 14 Javascript
简单谈谈axios中的get,post方法
Jun 25 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
Sep 12 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
Jan 08 jQuery
vue踩坑记录之数组定义和赋值问题
Mar 20 Javascript
js实现页面导航层级指示效果
Aug 25 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
ThinkPHP中公共函数路径和配置项路径的映射分析
2014/11/22 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
php实现生成PDF文件的方法示例【基于FPDF类库】
2018/07/21 PHP
PHP CURL使用详解
2019/03/21 PHP
phpQuery采集网页实现代码实例
2020/04/02 PHP
JS对img进行操作(换图片/切图/轮换/停止)
2013/04/17 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案
2020/08/13 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
Python的randrange()方法使用教程
2015/05/15 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
python实现静态web服务器
2019/09/03 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
某某同志考察材料
2014/05/28 职场文书
创先争优活动承诺书
2014/08/30 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
演讲开场白和结束语
2015/05/29 职场文书
汽车销售员工作总结
2015/08/12 职场文书
MySQL如何解决幻读问题
2021/08/07 MySQL
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android
Elasticsearch 聚合查询和排序
2022/04/19 Python