浅谈通过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 类
Nov 07 Javascript
20行代码实现的一个CSS覆盖率测试脚本
Jul 07 Javascript
js渐变显示渐变消失示例代码
Aug 01 Javascript
javascript修改IMG标签的src问题
Mar 28 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
Jun 27 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
Oct 22 Javascript
通过BootStrap实现轮播图的实际应用
Sep 26 Javascript
vue2滚动条加载更多数据实现代码
Jan 10 Javascript
jQuery实现标签页效果实战(4)
Feb 08 Javascript
聊聊JS动画库 Velocity.js的使用
Mar 13 Javascript
jQuery无冲突模式详解
Jan 17 jQuery
微信小程序实现简单表格
Feb 14 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插入mysql数据返回id的方法
2018/05/31 PHP
由浅到深了解JavaScript类
2006/09/08 Javascript
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
pjblog中的UBBCode.js
2007/04/25 Javascript
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
Javascript new Date().valueOf()的作用与时间戳由来详解
2013/04/24 Javascript
javascript禁用键盘功能键让右击及其他键无效
2013/10/09 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
JavaScript分页功能的实现方法
2015/04/25 Javascript
使用DeviceOne实现微信小程序功能
2016/12/29 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
关于vue-router的beforeEach无限循环的问题解决
2017/09/09 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
python版学生管理系统
2018/01/10 Python
Sanic框架流式传输操作示例
2018/07/18 Python
python调用百度语音REST API
2018/08/30 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
卫校护理专业毕业生求职信
2013/11/26 职场文书
教师个人的自我评价分享
2014/01/02 职场文书
优良学风班总结材料
2014/02/08 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
大学优秀班主任事迹材料
2014/05/02 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
文案策划岗位个人自我评价(范文)
2019/08/08 职场文书
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android