记录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 相关文章推荐
用box固定长宽实现图片自动轮播js代码
Jun 09 Javascript
JS实现同时搜索百度和必应的方法
Jan 27 Javascript
php结合imgareaselect实现图片裁剪
Jul 05 Javascript
基于ajax实现文件上传并显示进度条
Aug 03 Javascript
jquery表单插件form使用方法详解
Jan 20 Javascript
原生JS实现跑马灯效果
Feb 20 Javascript
jQuery编写textarea输入字数限制代码
Mar 23 jQuery
ES6新特性二:Iterator(遍历器)和for-of循环详解
Apr 20 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
Aug 16 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
Nov 06 Javascript
JS实现登录页密码的显示和隐藏功能
Dec 06 Javascript
解决vue-cli脚手架打包后vendor文件过大的问题
Sep 27 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 批量更新网页内容实现代码
2010/01/05 PHP
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
PHP基于SPL实现的迭代器模式示例
2018/04/22 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
js类的静态属性和实例属性的理解
2009/10/01 Javascript
Dom 是什么的详细说明
2010/10/25 Javascript
open 动态修改img的onclick事件示例代码
2013/11/13 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
jQuery实现拖拽效果插件的方法
2015/03/23 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
JavaScript jquery及AJAX小结
2016/01/24 Javascript
Javascript基础学习笔记(菜鸟必看篇)
2016/07/22 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
基于js中this和event 的区别(详解)
2017/10/24 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
详解JavaScript自定义函数
2020/07/29 Javascript
Python简单实现enum功能的方法
2016/04/25 Python
深入理解python中的atexit模块
2017/03/07 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
PyQt5每天必学之进度条效果
2018/04/19 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
荷兰男士时尚网上商店:Suitable
2017/12/25 全球购物
美国隐形眼镜网:Major Lens
2018/02/09 全球购物
SheIn沙特阿拉伯:女装在线
2020/03/23 全球购物
实习单位接收函模板
2014/01/10 职场文书
住宅质量保证书
2014/04/29 职场文书
档案工作汇报材料
2014/08/21 职场文书
生产操作工岗位职责
2014/09/16 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书