最近做的Vue SPA项目涉及到微信自定义分享,最初只是在指定页面下实现微信的二次分享功能。但是因为移动端使用的是vue-router的history 模式,所以在 iOS 端微信和 Android 端微信分享出来的截然不同,大多数是iOS 端微信会分享失败。上网查询了一些文档说是 iOS 端微信不支持 pushState 的 H5 新特性。还有就是 iOS 端微信记录的 URL 是首次访问网页时的网址,所以在使用window.location.href获取当前网址来换取微信的签名校验信息时候就会导致签名校验失败,致使最终微信分享失败。
iOS 端微信处理方法:保存首次进入页面时候的路径,在需要调用微信分享的页面内利用首次进入页面时候的路径 URL来换取iOS端微信分享的签名。
Android 端微信处理方法:Android 端微信每次切换路由时候都会刷新页面,故在需要使用微信分享的页面直接获取当前页面所在路径的 URL即使用window.location.href来换取微信分享的签名即可。
Android 设备环境:
iOS 设备环境:
在 vue 项目中只是分享某一个路径下的页面,即可在当前页面路径下引入写好的微信分享文件方法,在需要分享的页面进行调用即可。
在Vue SPA 项目 history 模式 中,指定页面需要实现动态分享,其余路径页面实现固定分享,既可以在 router.js 的 router.afterEach((to,from)=>{}) 全局生命周期钩子函数中调用微信分享方法即可实现指定路径页面动态分享,其余路径页面固定分享的需求。
hash 模式,直接按照 Android 端微信的调用方式即可。如有问题,可依据此思路作为参考,并结合实际需求进行相应的调整。