浅谈通过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鼠标滑过提示title具体实现代码
Aug 06 Javascript
JavaScript Math.ceil 方法(对数值向上取整)
Jan 09 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
Sep 30 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
May 31 Javascript
bootstrap table表格插件使用详解
May 08 Javascript
JS实现按钮颜色切换效果
Sep 05 Javascript
webpack4+express+mongodb+vue实现增删改查的示例
Nov 08 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 Javascript
js模拟F11页面全屏显示
Sep 17 Javascript
解决layui laydate 时间控件一闪而过的问题
Sep 28 Javascript
vue实现简单瀑布流布局
May 28 Javascript
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
用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 UTF8 文件的签名问题
2009/10/30 PHP
PHP 数据结构 算法 三元组 Triplet
2011/07/02 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
PHP中使用mpdf 导出PDF文件的实现方法
2018/10/22 PHP
JavaScript和JQuery实用代码片段(一)
2010/04/07 Javascript
自定义刻度jQuery进度条及插件
2015/09/02 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
ionic隐藏tabs的方法
2016/08/29 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
Pyhton中单行和多行注释的使用方法及规范
2016/10/11 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
django 常用orm操作详解
2017/09/13 Python
详解Python3的TFTP文件传输
2018/06/26 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
上课看小说检讨书
2014/02/22 职场文书
协议书模板
2014/04/23 职场文书
创建青年文明号材料
2014/05/09 职场文书
师范学院毕业生求职信
2014/06/24 职场文书
社会学专业求职信
2014/07/17 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
个人查摆剖析材料
2014/10/16 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
财务稽核岗位职责
2015/04/13 职场文书
委托开发合同书(标准版)
2019/08/07 职场文书