记录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 相关文章推荐
THREE.JS入门教程(1)THREE.JS使用前了解
Jan 24 Javascript
二叉树先序遍历的非递归算法具体实现
Jan 09 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
Jan 22 Javascript
原生js实现对Ajax的封装(仿jquery)
Jan 22 Javascript
JS简单实现滑动加载数据的方法示例
Oct 18 Javascript
浅谈Node Inspector 代理实现
Oct 19 Javascript
JS数组实现分类统计实例代码
Sep 30 Javascript
vue多次循环操作示例
Feb 08 Javascript
一文了解Vue中的nextTick
May 06 Javascript
js console.log打印对象时属性缺失的解决方法
May 23 Javascript
vue路由权限校验功能的实现代码
Jun 07 Javascript
vue实现自定义多选按钮
Jul 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开发大型项目的一点经验
2006/10/09 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
[原创]php正则删除img标签的方法示例
2017/05/27 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
PHP运用foreach神奇的转换数组(实例讲解)
2018/02/01 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
JavaScript瀑布流布局实现代码
2017/05/06 Javascript
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
javascript实现贪吃蛇小练习
2020/07/05 Javascript
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
一百多行python代码实现抢票助手
2018/09/25 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
pandas中的series数据类型详解
2019/07/06 Python
Python 如何实现数据库表结构同步
2020/09/29 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
西班牙拥有最佳品牌的动物商店:Animalear.com
2018/01/05 全球购物
美国嘻哈文化生活方式品牌:GLD
2018/04/15 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
优秀应届本科生求职信
2014/07/19 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
学校开除通知书
2015/04/25 职场文书
消费者理赔投诉书
2015/07/02 职场文书
小学班长竞选稿
2015/11/20 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python