记录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事件冒泡传递(cancelBubble 、stopPropagation)
May 08 Javascript
JCalendar 日历控件 v1.0 beta[兼容IE&Firefox] 有文档和例子
May 30 Javascript
jquery 查找新建元素代码
Jul 06 Javascript
javascript检查表单数据是否改变的方法
Jul 30 Javascript
Vue组件tree实现树形菜单
Apr 13 Javascript
js实现会跳动的日历效果(完整实例)
Oct 18 Javascript
使用Angular CLI生成 Angular 5项目教程详解
Mar 18 Javascript
Vue+Element实现动态生成新表单并添加验证功能
May 23 Javascript
实现高性能javascript的注意事项
May 27 Javascript
Javascript组合继承方法代码实例解析
Apr 02 Javascript
JS事件循环机制event loop宏任务微任务原理解析
Aug 04 Javascript
如何用JS实现网页瀑布流布局
Apr 24 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开发环境配置记录
2011/01/14 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
javascript面向对象之Javascript 继承
2010/05/04 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
jQuery中:enabled选择器用法实例
2015/01/04 Javascript
JavaScript中诡异的delete操作符
2015/03/12 Javascript
jQuery实现仿路边灯箱广告图片轮播效果
2015/04/15 Javascript
JQuery限制复选框checkbox可选中个数的方法
2015/04/20 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
基于js文件加载优化(详解)
2018/01/03 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
小程序实现搜索框
2020/06/19 Javascript
基于JS实现table导出Excel并保留样式
2020/05/19 Javascript
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
[10:14]2018DOTA2国际邀请赛寻真——paiN Gaming不仅为自己而战
2018/08/14 DOTA
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
python时间整形转标准格式的示例分享
2014/02/14 Python
Python3基础之输入和输出实例分析
2014/08/18 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
详解python中init方法和随机数方法
2019/03/13 Python
python 中xpath爬虫实例详解
2019/08/26 Python
python元组的概念知识点
2019/11/19 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
医生爱岗敬业演讲稿
2014/08/26 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
2016参观监狱警示教育活动心得体会
2016/01/15 职场文书
golang实现一个简单的websocket聊天室功能
2021/10/05 Golang
Java版 简易五子棋小游戏
2022/05/04 Java/Android