vue-router history模式下的微信分享小结


Posted in Javascript onJuly 05, 2018

背景

旧项目改造,进行前后端分离。做成了spa,为了保证后端路由时期链接可用性,使用了history模式。

因为不同的页面有不同的分享内容,所以每次路由都要重新进行wx.config/wx.ready调用

微信分享遇到的坑

微信官方文档上有下面一段话:

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)

在实际测试和大量真实数据收集后发现,Android4.4+都是支持pushState的。也就是说,没有遇到官方文档所述的问题。(此番调研后才决定采用history模式进行实施的,导致IOS下踩了坑)

IOS下遇到了问题:

# 打开页面时分享没有问题,路由一次之后再分享签名错误(invalid signature)

这个问题是由于IOS微信浏览器下,有着下面的“特性”:

把第一次打开的页面叫做进入页;把前端路由若干次跳转(通过pushState/replaceState改变url)之后,当前打开的页面叫做当前页。

微信验签使用的url(当前网页的URL,不包含#及其后面部分),在Android下取的是当前页url,在IOS下取的是进入页的url(支付目录也是一样)

知道了这个,可以采取下面的办法来解决:

使用vuex保存进入页的URL,每次wx.config需要的参数,都使用进入页的URL来进行签名

至此,微信分享签名错误的问题解决了,但分享还是不正常:# 自定义分享不生效

度娘谷歌了一番,大概有下面几种办法

  • 使用hash模式
  • 做成多页应用,每个页面都是进入页
  • 所有需要自定义分享的页面使用<a>替换<router-link>,跟2类似,使所有自定义分享页面变成进入页

对于我们的业务场景来说,hash模式不能保证历史链接的可用性,多页/<a>跳转都是以牺牲一定体验性为代价。

经过多番尝试,最后发现用下面的方法勉强解决了问题:

// 进入页面,控制自定义分享前,把当前页URL替换成进入页的URL(保证自定义分享正常)
this.setCurrentPage(location.href)
window.history.replaceState({}, document.title, this.landingPage)
wx.config()
wx.ready()

//...

// 离开当前页时,还原当前页的URL(保证返回正常)
beforeRouteLeave(to, from, next) {
  window.history.replaceState({}, '', this.currentPage)
  next()
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
半角全角相互转换的js函数
Oct 16 Javascript
两个比较有用的Javascript工具函数代码
Feb 17 Javascript
jquery 为a标签绑定click事件示例代码
Jun 23 Javascript
Jquery实现弹性滑块滑动选择数值插件
Aug 08 Javascript
JavaScript实现的背景自动变色代码
Oct 17 Javascript
详解通过JSON数据使用VUE.JS
May 26 Javascript
Vue中自定义全局组件的实现方法
Dec 08 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
Dec 13 Javascript
vue.js动画中的js钩子函数的实现
Jul 06 Javascript
Vue批量图片显示时遇到的路径被解析问题
Mar 28 Javascript
Vue 实现html中根据类型显示内容
Oct 28 Javascript
uni-app如何实现增量更新功能
Jan 03 Javascript
微信小程序实现运动步数排行功能(可删除)
Jul 05 #Javascript
微信小程序之批量上传并压缩图片的实例代码
Jul 05 #Javascript
JavaScript控制浏览器全屏显示简单示例
Jul 05 #Javascript
基于jQuery使用Ajax动态执行模糊查询功能
Jul 05 #jQuery
JavaScript递归函数解“汉诺塔”算法代码解析
Jul 05 #Javascript
微信小程序开发之改变data中数组或对象的某一属性值
Jul 05 #Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
Jul 05 #Javascript
You might like
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
jQuery提交表单ajax查询实例代码
2012/10/07 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
JavaScript eval() 函数介绍及应用示例
2014/07/29 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
Vue.js 表单校验插件
2016/08/14 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
解决一个微信号同时支持多个环境网页授权问题
2019/08/07 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
jquery更改元素属性attr()方法操作示例
2020/05/22 jQuery
简单谈谈python中的lambda表达式
2018/01/19 Python
ubuntu安装mysql pycharm sublime
2018/02/20 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
2018/05/21 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
2018/12/27 Python
python游戏开发之视频转彩色字符动画
2019/04/26 Python
python 同时读取多个文件的例子
2019/07/16 Python
python绘制动态曲线教程
2020/02/24 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
伊利莎白雅顿官网:Elizabeth Arden
2016/10/10 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
为什么使用接口?
2014/08/13 面试题
酒店管理专业学生求职信
2013/09/27 职场文书
怎么写好自荐信
2013/10/30 职场文书
致铅球运动员广播稿精选
2014/01/12 职场文书
新领导上任欢迎词
2014/01/13 职场文书
实验室的标语
2014/06/20 职场文书
校车司机安全责任书
2015/05/11 职场文书
安全责任协议书范本
2016/03/23 职场文书
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS