记录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 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
Mar 10 Javascript
js获得地址栏?问号后参数的方法
Aug 08 Javascript
javascript实现颜色渐变的方法
Oct 30 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
Mar 04 Javascript
javascript等号运算符使用详解
Apr 16 Javascript
通过点击jqgrid表格弹出需要的表格数据
Dec 02 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
Canvas 绘制粒子动画背景
Feb 15 Javascript
vue登录注册及token验证实现代码
Dec 14 Javascript
用jQuery将JavaScript对象转换为querystring查询字符串的方法
Nov 12 jQuery
vue history 模式打包部署在域名的二级目录的配置指南
Jul 02 Javascript
微信小程序实现简单购物车功能
Dec 30 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中this,self,parent的区别详解
2013/06/08 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
jQuery获取attr()与prop()属性值的方法及区别介绍
2016/07/06 Javascript
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
浅析JavaScript 函数柯里化
2020/09/08 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
python分割和拼接字符串
2013/11/01 Python
Python实现抓取百度搜索结果页的网站标题信息
2015/01/22 Python
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
python人民币小写转大写辅助工具
2018/06/20 Python
Python实现的线性回归算法示例【附csv文件下载】
2018/12/29 Python
Python简单实现区域生长方式
2020/01/16 Python
matlab中imadjust函数的作用及应用举例
2020/02/27 Python
python实现将字符串中的数字提取出来然后求和
2020/04/02 Python
Python环境管理virtualenv&virtualenvwrapper的配置详解
2020/07/01 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
scrapy-splash简单使用详解
2021/02/21 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
含精油的天然有机化妆品:Indemne
2019/08/27 全球购物
电脑教师的自我评价
2013/12/18 职场文书
《卖木雕的少年》教学反思
2014/04/11 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
总经理检讨书范文
2015/02/16 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS