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 相关文章推荐
javascript中处理时间戳为日期格式的方法
Jan 02 Javascript
jquery ajax跨域解决方法(json方式)
Feb 04 Javascript
JavaScript实现的使用键盘控制人物走动实例
Aug 27 Javascript
根据配置文件加载js依赖模块
Dec 29 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
Feb 14 Javascript
有关jQuery中parent()和siblings()的小问题
Jun 01 Javascript
javascript匀速动画和缓冲动画详解
Oct 20 Javascript
jQuery File Upload文件上传插件使用详解
Dec 06 Javascript
JavaScript多态与封装实例分析
Jul 27 Javascript
微信小程序实现图片上传
May 23 Javascript
什么时候不能在 Node.js 中使用 Lock Files
Jun 24 Javascript
vue-resourc发起异步请求的方法
Feb 11 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
php json_encode奇怪问题说明
2011/09/27 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
jscript之List Excel Color Values
2007/06/13 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
JS方法调用括号的问题探讨
2014/01/24 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
js纯数字逐一停止显示效果的实现代码
2016/03/16 Javascript
JS继承之借用构造函数继承和组合继承
2016/09/07 Javascript
学习vue.js计算属性
2016/12/03 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
python实现朴素贝叶斯分类器
2018/03/28 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
python中matplotlib实现随鼠标滑动自动标注代码
2020/04/23 Python
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
FitFlop美国官网:英国符合人体工学的鞋类品牌
2018/10/05 全球购物
毕业设计计划书
2014/01/09 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
任命书格式
2014/06/05 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
如何利用golang运用mysql数据库
2022/03/13 Golang