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的类型转换(字符转数字 数字转字符)
Aug 30 Javascript
fancybox modal的完美解决(右上的X)
Oct 30 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
Mar 21 Javascript
AngularJS 如何在控制台进行错误调试
Jun 07 Javascript
JS实现给json数组动态赋值的方法示例
Mar 19 Javascript
Angular6笔记之封装http的示例代码
Jul 27 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
Nov 25 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
May 21 Javascript
vue实现二级导航栏效果
Oct 19 Javascript
微信小程序(订阅消息)功能
Oct 25 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
Oct 02 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
Dec 30 jQuery
微信小程序实现运动步数排行功能(可删除)
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模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
2019/09/30 PHP
php+js实现点赞功能的示例详解
2020/08/07 PHP
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
JavaScript表单验证开发
2016/11/23 Javascript
20行JS代码实现网页刮刮乐效果
2017/06/23 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
浅析Python中的join()方法的使用
2015/05/19 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Python实现二维数组输出为图片
2018/04/03 Python
印尼极简主义和实惠的在线家具店:Fabelio
2019/03/27 全球购物
大学生预备党员自我评价分享
2013/11/16 职场文书
大学同学会活动方案
2014/08/20 职场文书
劳资员岗位职责
2015/02/13 职场文书
孝女彩金观后感
2015/06/10 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
比赛口号霸气押韵
2015/12/24 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
nginx proxy_cache 缓存配置详解
2021/03/31 Servers
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android