记录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 有用的脚本函数
May 07 Javascript
jquery 1.3.2 IE8中的一点点的小问题解决方法
Jul 10 Javascript
jquery 之 $().hover(func1, funct2)使用方法
Jun 14 Javascript
解释&&和||在javascript中的另类用法
Jul 28 Javascript
JavaScript实现继承的4种方法总结
Oct 16 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
Mar 11 Javascript
javascript数组随机排序实例分析
Jul 22 Javascript
JS+DIV+CSS排版布局实现美观的选项卡效果
Oct 10 Javascript
jQuery post数据至ashx实例详解
Nov 18 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
Aug 29 Javascript
微信小程序template模板实例详解
Oct 27 Javascript
vue组件vue-esign实现电子签名
Apr 21 Vue.js
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编写daemon process详解及实例代码
2016/09/30 PHP
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
JSON中双引号的轮回使用过程中一定要小心
2014/03/05 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
jQuery DOM删除节点操作指南
2015/03/03 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
JS图片定时翻滚效果实现方法
2016/06/21 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
使用Easyui实现查询条件的后端传递并自动刷新表格的两种方法
2019/09/09 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
Vue3.0中的monorepo管理模式的实现
2019/10/14 Javascript
node 版本切换的实现
2020/02/02 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
2020/10/26 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
深入理解Python中字典的键的使用
2015/08/19 Python
pip安装python库的方法总结
2019/08/02 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
python 变量初始化空列表的例子
2019/11/28 Python
python3 简单实现组合设计模式
2020/07/02 Python
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
建筑结构施工求职信
2014/07/11 职场文书
学习党的群众路线剖析材料
2014/10/09 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
国家助学贷款承诺书
2015/04/30 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB
Android自定义双向滑动控件
2022/04/19 Java/Android
JS setTimeout与setInterval的区别
2022/04/20 Javascript