记录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 相关文章推荐
JavaScript延迟加载
Mar 09 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
Aug 15 Javascript
jQuery选中select控件 无法设置selected的解决方法
Sep 01 Javascript
更优雅的事件触发兼容
Oct 24 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
Feb 17 Javascript
JQuery限制复选框checkbox可选中个数的方法
Apr 20 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
Nov 15 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Dec 14 Javascript
Vuex之理解Mutations的用法实例
Apr 19 Javascript
JavaScript调用模式与this关键字绑定的关系
Apr 21 Javascript
React优化子组件render的使用
May 12 Javascript
vue中axios防止多次触发终止多次请求的示例代码(防抖)
Feb 16 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/02/22 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
PHP实现伪静态方法汇总
2016/01/13 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
表单内同名元素的控制
2006/11/22 Javascript
jquery 图片轮换效果
2010/07/29 Javascript
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
最简单的js图片切换效果实现代码
2011/09/24 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
2014/04/08 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
JS公共小方法之判断对象是否为domElement的实例
2016/11/25 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
Python 12306抢火车票脚本 Python京东抢手机脚本
2018/02/06 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
对python生成业务报表的实例详解
2019/02/03 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
三爱活动实施方案
2014/03/19 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
MySQL中使用or、in与union all在查询命令下的效率对比
2021/05/26 MySQL
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL