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 相关文章推荐
extjs 为某个事件设置拦截器
Jan 15 Javascript
Jquery 实现弹出层插件
Jan 28 Javascript
Javascript中拼接大量字符串的方法
Feb 05 Javascript
详解JavaScript基于面向对象之创建对象(1)
Dec 10 Javascript
jQuery 实现评论等级好评差评特效
May 06 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
Sep 15 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
May 13 jQuery
JS中的BOM应用
Feb 02 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
Apr 22 Javascript
详解基于mpvue微信小程序下载远程图片到本地解决思路
May 16 Javascript
Vue配置marked链接添加target=&quot;_blank&quot;的方法
Jul 19 Javascript
vue完美实现el-table列宽自适应
May 08 Vue.js
微信小程序实现运动步数排行功能(可删除)
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根据分类合并数组的方法实例详解
2013/11/06 PHP
php实现的http请求封装示例
2016/11/08 PHP
php实现微信分享朋友链接功能
2019/02/18 PHP
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
python共享引用(多个变量引用)示例代码
2013/12/04 Python
Python下Fabric的简单部署方法
2015/07/14 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
python实现飞机大战
2018/09/11 Python
django 控制页面跳转的例子
2019/08/06 Python
解决Python命令行下退格,删除,方向键乱码(亲测有效)
2020/01/16 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
python实现KNN近邻算法
2020/12/30 Python
详解如何用HTML5 Canvas API控制图片的缩放变换
2016/03/22 HTML / CSS
微软日本官方网站:Microsoft日本
2017/11/26 全球购物
程序员机试试题汇总
2012/03/07 面试题
迟到检讨书1000字
2014/01/15 职场文书
单位提档介绍信
2014/01/17 职场文书
开门红主持词
2014/04/02 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
我的中国梦口号
2014/06/16 职场文书
毕业生实习证明
2014/09/19 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技
MySQL索引 高效获取数据的数据结构
2022/05/02 MySQL