vue微信分享的实现(在当前页面分享其他页面)


Posted in Javascript onApril 16, 2019

首先以分享给朋友为例

1、先看官方文档

wx.onMenuShareAppMessage({

  title: '', // 分享标题

  desc: '', // 分享描述

  link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致

  imgUrl: '', // 分享图标

  type: '', // 分享类型,music、video或link,不填默认为link

  dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空

  success: function () {

    // 用户确认分享后执行的回调函数

  },

  cancel: function () {

    // 用户取消分享后执行的回调函数

  }

});

2、vue分享踩的坑

* 1、微信分享中获取动态的url
* 2、 微信二次分享自动添加的参数     form=singlemessage
* 3、vue中各个页面都可以调用分享

3、直接代码分析

为了保证每个页面都可以调起微信分享,需要在vue根组件中,添加 watch监听

代码

watch: {
    // 监听 $route 变化调用分享链接
    "$route"(to, from) {
      let currentRouter = this.$router.currentRoute.fullPath;  //
      if(currentRouter.indexOf('userShare') == -1){   //如果不是userShare分享页面,则分享另外一个接口
        this.shareOut();
      }else{
        this.shareOutTwo();     //当前页面是userShare页面时分享调用另外一个接口   
      }
    }
  },

4、shareOut()函数

let signStr = '';      //sha1加密字符串
      let timestamp = 1473254558; //时间戳
      let nonceStr = 'shupao';
      var obj = {
        title:"",        //标题
        desc:"文字描述",     //描述
        link:"http://www.XXXXXX.com/wx/pub/sr/simpleRegister.do",
        imgUrl:"http://XXXXXXXXX.com/picactive.jpg"
      };
      this.$ydkAjax({
        SENTYPE: "GET",
        url: this.$domain + '/wx/pub/common/getJsApiTicket.json', //自己服务器获取jsapi_ticket接口
        params: null,
        successFc: (response) => {
          //拼接sha1加密字符串
          signStr = 'jsapi_ticket=' + response.data.data + '&noncestr=' + nonceStr + '×tamp=' + timestamp + '&url=' + window.location.href;
          var signature = SHA1(signStr);
          wx.config({
            debug: false,
            appId: "wx6957b3a945a05e90",   //appId
            timestamp: timestamp,      //时间戳
            nonceStr: nonceStr,       //加密需要字符串(自己定义的)    
            signature: signature,      //sha1加密后字符串
            jsApiList: [ 'onMenuShareTimeline', 'onMenuShareAppMessage']
          });
          wx.ready(function () {
            //分享到朋友圈"
            wx.onMenuShareTimeline({
              title: obj.title,
              link: obj.link, // 分享链接
              imgUrl: obj.imgUrl, // 分享图标
              success: function () {
                // console.log('分享到朋友圈成功')
              },
              cancel: function () {
                // console.log('分享到朋友圈失败')
              }
            });
            //分享给朋友
            wx.onMenuShareAppMessage({
              title: obj.title, // 分享标题
              desc: obj.desc, // 分享描述
              link: obj.link, // 分享链接
              imgUrl: obj.imgUrl, // 分享图标
              success: function () {
                // console.log('分享到朋友成功')
              },
              cancel: function () {
                // console.log('分享到朋友失败')
              }
            });
          })
        },
        isLayer: false
      })

5、需要注意的事

*1、url是直接通过 window.location.href 获取的,不是使用 window.location.href.split(“#”)[0]来获取, 因为我的vue项目是通过hash模式来进行路由跳转的 , 直接使用 window.location.href.split(“#”)[0]会导致签名失败

//拼接sha1加密字符串
signStr = 'jsapi_ticket=' + response.data.data + '&noncestr=' + nonceStr + '×tamp=' + timestamp + '&url=' + window.location.href

*2、而且我们要在当前页面分享出去之后 , 其他用户打开之后 不是当前分享出去的页面 ,这就需要 调整 shareOut()函数中 obj对象中的 link参数为其他页面链接

6、link参数

上述 5 问题中的加密字符串汇总的 url 和 分享对象中 link中的页面链接可以不用保持一样,因为本来就是要在当前页面分享出去其他页面的链接。网上我看到有人说这两个必须要保持一样,其实没有必要, 除非你只是简单的在vue项目中的其中一个页面做分享 , 然后只分享当前页面才需要让二者保持一致性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用倒置滤镜把div倒置,再把table倒置。
Jul 31 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
Jan 28 Javascript
JS继承用法实例分析
Feb 05 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
Sep 12 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
Dec 08 Javascript
JS实现获取剪贴板内容的方法
Jun 21 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
jquery实现自适应banner焦点图
Feb 16 Javascript
Vue通过input筛选数据
Oct 26 Javascript
Three.js基础学习之场景对象
Sep 27 Javascript
浅析vue深复制
Jan 29 Javascript
在Vue项目中使用snapshot测试的具体使用
Apr 16 #Javascript
vue.js中使用echarts实现数据动态刷新功能
Apr 16 #Javascript
详解vue-cli 脚手架 安装
Apr 16 #Javascript
详解jquery和vue对比
Apr 16 #jQuery
JS使用百度地图API自动获取地址和经纬度操作示例
Apr 16 #Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
Apr 16 #jQuery
vue+element UI实现树形表格带复选框的示例代码
Apr 16 #Javascript
You might like
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
javascript 解析url的search方法
2010/02/09 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
js+CSS实现模拟华丽的select控件下拉菜单效果
2015/09/01 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
Vue 单文件中的数据传递示例
2017/03/21 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
Windows下python2.7.8安装图文教程
2016/05/26 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
python multiprocessing模块用法及原理介绍
2019/08/20 Python
Pytorch中的variable, tensor与numpy相互转化的方法
2019/10/10 Python
Python图片的横坐标汉字实例
2019/12/04 Python
Django日志及中间件模块应用案例
2020/09/10 Python
详解Python中的文件操作
2021/01/14 Python
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
高中毕业自我鉴定
2013/12/22 职场文书
完美主义个人的自我评价
2014/02/17 职场文书
党员廉洁自律承诺书
2014/05/26 职场文书
乡镇群众路线教育实践活动整改措施
2014/10/04 职场文书
离婚协议书应该怎么写
2014/10/12 职场文书
2014年学前班工作总结
2014/12/08 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang
阿里云服务器部署mongodb的详细过程
2021/09/04 MongoDB