浅谈通过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去除字符串末尾的空白实例代码
Sep 22 Javascript
javascript学习笔记(七)Ajax和Http状态码
Oct 08 Javascript
js的[defer]和[async]属性
Nov 24 Javascript
Yii2使用Bootbox插件实现自定义弹窗
Apr 02 Javascript
谈谈jQuery Ajax用法详解
Nov 27 Javascript
VUE JS 使用组件实现双向绑定的示例代码
Jan 10 Javascript
妙用Angularjs实现表格按指定列排序
Jun 23 Javascript
ReactNative实现Toast的示例
Dec 31 Javascript
JS实现HTML页面中动态显示当前时间完整示例
Jul 30 Javascript
vue2.0移动端滑动事件vue-touch的实例代码
Nov 27 Javascript
使用layui 的layedit定义自己的toolbar方法
Sep 18 Javascript
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 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安全编程之加密功能
2006/10/09 PHP
PHP+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
基于PHP开发中的安全防范知识详解
2013/06/06 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
destoon整合ucenter后注册页面不跳转的解决方法
2014/06/21 PHP
php实现点击可刷新验证码
2015/11/07 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
PHP7引入的"??"和"?:"的区别讲解
2019/04/08 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
JS是按值传递还是按引用传递
2015/01/30 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
JS小数运算出现多为小数问题的解决方法
2016/06/02 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
vue-路由精讲 二级路由和三级路由的作用
2020/08/06 Javascript
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
python爬虫入门教程--快速理解HTTP协议(一)
2017/05/25 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
基于python检查SSL证书到期情况代码实例
2020/04/04 Python
物业管理求职自荐信
2013/09/25 职场文书
考试退步检讨书
2014/01/15 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
2014教师专业技术工作总结
2014/12/03 职场文书
领导参观欢迎词
2015/01/26 职场文书
python的html标准库
2022/04/29 Python