记录vue做微信自定义分享的一些问题


Posted in Javascript onSeptember 12, 2019

前言

众所周知,在使用vue做项目的时候,微信自定义分享一直是一个坑,只是ios上坑明显的多。

然后每次遇到问题都要度娘很久。

奇怪的是貌似和很多人遇到的问题一样,但是他们写的解决方案都没办法直接解决我遇到的问题。

这里就记录一下遇到过的一些坑,和解决方式。

目前项目里面,安卓和ios上面的自定义分享已经没有什么问题了。

问题及解决方式

hash模式

在微信的官方文档中,提到关于jsapi_ticket的签名算法中,生成签名的时候,当前网页的URL,不包含#及其后面的部分;而且自定义分享出去的链接,微信也会主动往链接的后面拼接一些参数,比如from之类的;这也就造成了一些问题,比如要么签名不正确,要么分析那个出去的链接,二次分享又回出问题。

那么我这里的解决方式就是直接不用hash模式了,问题又多,链接也不好看,直接使用mode: 'history'。

切换页面签名失效

这个在网上也有很多解决方案。由于我这里的项目里不需要细致到每个页面都必须做自定义分享,只需要在触发某些条件的时候触发自定义分享,所以是这么做的。

在main.js文件中编写自定义分享的函数逻辑;

// 微信自定义分享
Vue.prototype.wxShare = async function ({title , desc , link = window.location.href,imgUrl ,success}) {
  let that = this;
  // 当前页面地址
  let url = window.location.href;
  // 调用后端服务获取微信签名内容
  let {data: wxCfg} = await that.ajax({api: that.api.wechatGetWxSdk, data: {url: url}})
  if (!wx || !wxCfg) return;
  wx.config({
    debug: false,
    appId: wxCfg.appId,
    timestamp: wxCfg.timestamp,
    nonceStr: wxCfg.nonceStr,
    signature: wxCfg.signature,
    jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData', 'onMenuShareTimeline', 'onMenuShareAppMessage']
  });
  wx.ready(function () {
    wx.updateAppMessageShareData({
      title: title, desc: desc, link: link, imgUrl: imgUrl,
      success: function () {
        success ? success() : ''
      }
    })
    wx.updateTimelineShareData({
      title: title, link: link, imgUrl: imgUrl,
      success: function () {
        success ? success() : ''
      }
    })
    wx.onMenuShareTimeline({
      title: title, link: link, imgUrl: imgUrl,
      success: function () {
        success ? success() : ''
      }
    })
    wx.onMenuShareAppMessage({
      title: title, desc: desc, link: link, imgUrl: imgUrl,
      success: function () {
        success ? success() : ''
      }
    })
  })
  wx.error(function (res) {
    that.$toast('请刷新当前页面后重试')
  });
}

在需要调用自定义分享的时候,就这样调用

await this.wxShare({
  title: '分享的标题', 
  desc: '分享的摘要',
  link: '分享出去的链接地址',
  imgUrl: '分享的封面图',
  success: function(){
    // 调用成功的回调
  }
})

IOS路由跳转之后依然签名失效

上面的问题解决之后,项目上线了,很多ios的用户反馈个别页面还是无法成功调用自定义分享,前期的解决方案很暴力...怼用户,让用户刷新一下当前页面,诶不成想,就好了!

后来越来越多的反馈..没办法了,必须得想想辙解决一下...

就开始找原因,发现android一点问题没有。

但是在ios上,无论路由跳转多少次,复制出来的链接都是首次进入的页面的链接,于是改造一下上面的调用函数。
首先记录首次进入页面的url

Vue.prototype.firstUrl = window.location.href;

然后在wxShare函数中加了一个判断。

大致意思就是判断当前设备是不是ios,如果是,签名用的url就使用firstUrl,如果不是,就使用window.location.href

然后上线,发现就没有再出过问题咯。

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

Javascript 相关文章推荐
window.location和document.location的区别分析
Dec 23 Javascript
JQuery 常用操作代码
Mar 14 Javascript
30分钟就入门的正则表达式基础教程
Feb 25 Javascript
简单的Jquery全选功能
Nov 07 Javascript
跨域传值即主页面与iframe之间互相传值
Dec 09 Javascript
JSON字符串和对象之间的转换详解
May 26 Javascript
理解javascript中的原型和原型链
Jul 30 Javascript
jQuery深拷贝Json对象简单示例
Jul 06 Javascript
纯JavaScript实现实时反馈系统时间
Oct 26 Javascript
js根据后缀判断文件文件类型的代码
May 09 Javascript
js实现弹窗效果
Aug 09 Javascript
vue 中的动态传参和query传参操作
Nov 09 Javascript
js 根据对象数组中的属性进行排序实现代码
Sep 12 #Javascript
JavaScript和TypeScript中的void的具体使用
Sep 12 #Javascript
微信小程序页面调用自定义组件内的事件详解
Sep 12 #Javascript
基于JavaScript 实现拖放功能
Sep 12 #Javascript
Node.JS用纯JavaScript生成图片或滑块式验证码功能
Sep 12 #Javascript
layui 对table中的数据进行转义的实例
Sep 12 #Javascript
layui点击数据表格添加或删除一行的例子
Sep 12 #Javascript
You might like
PHP 七大优势分析
2009/06/23 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
基于jQuery的图片左右无缝滚动插件
2012/05/23 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
JavaScript Serializer序列化时间处理示例
2014/07/31 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
jQuery地图map悬停显示省市代码分享
2015/08/20 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
2017/06/16 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
详解JS预解析原理
2020/06/16 Javascript
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
python 装饰器功能以及函数参数使用介绍
2012/01/27 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
2018/10/15 Python
python中几种自动微分库解析
2019/08/29 Python
Python jieba库用法及实例解析
2019/11/04 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
Python中的Cookie模块如何使用
2020/06/04 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
CSS3 开发工具收集
2010/04/17 HTML / CSS
HTML5中使用json对象的实例代码
2018/09/10 HTML / CSS
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
世界上最大的曲棍球商店:Pro Hockey Life
2017/10/30 全球购物
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
借款协议书
2014/04/12 职场文书
员工手册编写范本
2015/05/14 职场文书
学校学习型党组织建设心得体会
2019/06/21 职场文书