js实现通过window监听pushState和replaceState
前端路由中vue-router的路由变更原理
vue-router可以通过两种模式进行前端路由,哈希模式:
location.hash='/abc',location.replace('#/def')
哈希模式哈希值变化可以通过onhashchange监听到,从而渲染响应组件
history模式:
hostory.pushState(stateObj,'title 1','/abc'),history.replaceState(stateObj,'title 2','/def')
history模式可以通过对原生pushState和replaceState方法进行封装,主动发出事件实现监听
var _wr = function(type) {
var orig = history[type];
return function() {
var e = new Event(type);
e.arguments = arguments;
window.dispatchEvent(e);
// 注意事件监听在url变更方法调用之前 也就是在事件监听的回调函数中获取的页面链接为跳转前的链接
var rv = orig.apply(this, arguments);
return rv;
};
};
history.pushState = _wr('pushState');
history.replaceState = _wr('replaceState');
window.addEventListener('pushState', function(e) {
var path = e && e.arguments.length > 2 && e.arguments[2];
var url = /^http/.test(path) ? path : (location.protocol + '//' + location.host + path);
console.log('old:'+location.href,'new:'+url);
});
window.addEventListener('replaceState', function(e) {
var path = e && e.arguments.length > 2 && e.arguments[2];
var url = /^http/.test(path) ? path : (location.protocol + '//' + location.host + path);
console.log('old:'+location.href,'new:'+url);
});
js实现通过window监听pushState和replaceState的更多相关文章
- 移动端用js与jquery实时监听输入框值的改动
背景: 在一次移动端H5开发中,需要监听输入框值的实时变动. onchange事件肯定抛弃,因为只能失去焦点才触发. 而keyPress在Android可以触发,iOS不可以. 又不想用Android ...
- js与jquery实时监听输入框值变化方法
本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ...
- js与jquery实时监听输入框值的oninput与onpropertychange方法
文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时监 ...
- gulp压缩html,css,js文件流程、监听任务、使用gulp创建服务器、同时运行多个任务、反向代理
一.初始化 首先先做一个项目初始化,用来记录你项目中用到的工具 再你项目文件下打开一个控制台,输入命令 yarn init -y 进行初始化 输入命令yarn add gulp -g --- 全局安 ...
- [No00006A]Js的addEventListener()及attachEvent()区别分析【js中的事件监听】
1.添加时间监听: Chrom中: addEventListener的使用方式: target.addEventListener(type, listener, useCapture); target ...
- JS基础(二)事件监听练习之table鼠标悬停行变色
JS监听事件简单学习: [object].addEvent("事件类型","处理函数","冒泡事件或捕获事件"); [object].r ...
- js 移动端之监听软键盘弹出收起
js 移动端关于页面布局,如果底部有position:fixed的盒子,又有input,当软键盘弹出收起都会影响页面布局.这时候Android可以监听resize事件,代码如下,而ios没有相关事件. ...
- js移动端回退监听 popstate
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 从零开始学习Node.js例子五 服务器监听
httpsnifferInvoke.js var http = require('http'); var sniffer = require('./httpsniffer'); var server ...
- js - 预加载+监听图片资源加载制作进度条
这两天遇到一个新需求:一个一镜到底的h5动画.因为功能的特殊性,就要求我们提前监听页面的静态图片是否全部加载完毕.即处理预加载. 总结下来,下次这种需求需要提前注意以下几点: 一.图片而不是背景图 本 ...
随机推荐
- PHP JSON 数据编码和解码
JSON 的使用场景: 数据表一个字段需要记录多个信息,如记录关于用户的其他信息 数据传输,如:API接口返回值.Ajax中实现异步加载 配置文件,如 composer.json 包管理配置文件 在 ...
- chrome禁止混合内容(Mixed Content)三种解决办法
问题描述 在Chrome浏览器内,https协议的网站内加载http协议的图片,会报以下错误,图片也会加载不出来. rust 复制代码 Mixed Content: The page at 'ht ...
- C++ 与 C#混合编程 示例 (基于VS2022)
C#使用过程中经常会遇到和C++联合开发的过程,通过C++编写动态库,封装成dll后再C#中调用,在此做个记录, 一.新建C#控制台项目 打开VisualStudio,新建一个C#控制台项目, 项目名 ...
- package.json&package-lock.json(项目描述文件)
package.json项目描述文件,记录了当前项目信息,例如项目名称.版本.作者.github地址.当前项目依赖了哪些第三方模块等. 使用npm init-y命令生成. 记录了依赖模块,项目名称,版 ...
- 深入解析Tomcat类加载器:为何及如何打破Java双亲委派模型
引言:Java类加载的"家规"与现实需求 在Java世界中,类加载器的双亲委派模型就像一套严格的"家规",规定了类加载的层级秩序.这套机制保证了Java核心库的 ...
- git进入vim模式的处理
1.当git commit 没-m输入说明时,我们会进入vim模式,在此模式下可以进行提交说明: 2.输入i,进入insert输入模式,输入自己提交内容的说明: 3.输入完后,按ESC,下方inser ...
- 从零开始学Flink:实时流处理实战
在大数据处理领域,实时流处理正变得越来越重要.Apache Flink作为领先的流处理框架,提供了强大而灵活的API来处理无界数据流.本文将通过经典的SocketWordCount示例,深入探讨Fli ...
- FMC子卡设计方案:202-基于TI DSP TMS320C6678、Xilinx K7 FPGA XC7K325T的高速数据处理核心板
基于TI DSP TMS320C6678.Xilinx K7 FPGA XC7K325T的高速数据处理核心板 一.板卡概述 该DSP+FPGA高速信号采集处理板由我公司自主研发,包含一片TI DSP ...
- SpringCloud专题面试
1.微服务架构优缺点 1)单体应用 开发的效率比较低,由于代码量大,项目启动缓慢,部署麻烦,后期难以维护. 2)服务拆分 分为多个小应用,提高了开发效率,降低了代码的耦合程度,不同的服务可以采用不同的 ...
- 按Ctrl键会引发几次按键消息
何志丹(一),新建一个单文档工程CtrlEg.(二),为CCtrlEgView的WM_KEYDOWN消息和WM_KEYUP消息添加响应函数.具体代码如下:void CCtrlEgView::OnKey ...