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 相关文章推荐
JavaScript 学习 - 提高篇
Feb 02 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
Jun 06 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
Mar 26 Javascript
js利用clipboardData实现截屏粘贴功能
Oct 12 Javascript
js控制文本框禁止输入特殊字符详解
Apr 07 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
Jan 25 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
Jun 22 Javascript
使用 Vue cli 3.0 构建自定义组件库的方法
Apr 30 Javascript
详解jenkins自动化部署vue
May 14 Javascript
优雅的处理vue项目异常实战记录
Jun 05 Javascript
Vue 开发必须知道的36个技巧(小结)
Oct 09 Javascript
vue props 一次传多个值实例
Jul 22 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
PHP中MD5函数使用实例代码
2008/06/07 PHP
ThinkPHP5.1验证码功能实现的示例代码
2020/06/08 PHP
jquery.ui.progressbar 中文文档
2009/11/26 Javascript
15 个 JavaScript Web UI 库
2010/05/19 Javascript
javascript实现的DES加密示例
2013/10/30 Javascript
Node.js实现文件上传
2016/07/05 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
JS判断时间段的实现代码
2017/06/14 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
JavaScript 闭包的使用场景
2020/09/17 Javascript
在django中使用自定义标签实现分页功能
2017/07/04 Python
python如何读写csv数据
2018/03/21 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
PyQt5 pyqt多线程操作入门
2018/05/05 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
中专毕业生自我鉴定范文
2013/11/09 职场文书
行政助理的岗位职责
2014/02/18 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
校庆活动方案
2014/03/31 职场文书
小班评语大全
2014/05/04 职场文书
委托书的格式
2014/08/01 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
主持人开幕词
2015/01/29 职场文书
护士年终个人总结
2015/02/13 职场文书
证婚人致辞精选
2015/07/28 职场文书
Python进度条的使用
2021/05/17 Python
CSS 制作波浪效果的思路
2021/05/18 HTML / CSS
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏