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 相关文章推荐
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 Javascript
『jQuery』名称冲突使用noConflict方法解决
Apr 22 Javascript
浅谈Javascript 数组与字典
Jan 29 Javascript
详解JavaScript的Polymer框架中的通知交互
Jul 29 Javascript
Angularjs中使用Filters详解
Mar 11 Javascript
详解Vue.js动态绑定class
Dec 20 Javascript
Jquery和CSS实现选择框重置按钮功能
Nov 08 jQuery
详解Vue底部导航栏组件
May 02 Javascript
小程序实现短信登录倒计时
Jul 12 Javascript
jQuery实现颜色打字机的完整代码
Mar 19 jQuery
微信小程序自定义联系人弹窗
May 26 Javascript
vue实现图片裁剪后上传
Dec 16 Vue.js
在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重新实现PHP脚本引擎内置函数
2007/03/06 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP crc32()函数讲解
2019/02/14 PHP
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
Node.js Express 框架 POST方法详解
2017/01/23 Javascript
node中的session的具体使用
2018/09/14 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
一些你可能不熟悉的JS知识点总结
2019/03/15 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
详解VUE中的插值( Interpolation)语法
2020/10/18 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
wxPython定时器wx.Timer简单应用实例
2015/06/03 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
Python列表如何更新值
2020/05/27 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
Python3如何实现Win10桌面自动切换
2020/08/11 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
2021/03/03 Python
TecoBuy澳大利亚:在线电子和小工具商店
2020/06/25 全球购物
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
结婚典礼证婚词
2014/01/08 职场文书
淘宝网店营销策划书
2014/01/11 职场文书
个人求职信范例
2014/01/29 职场文书
理财投资建议书
2014/03/12 职场文书
中学生家长评语大全
2014/04/16 职场文书
小学生演讲稿大全
2014/04/25 职场文书
小学生感恩父母演讲稿
2014/08/28 职场文书
先进典型发言材料
2014/12/30 职场文书
自荐信格式范文
2015/03/04 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
七年级上册生物的课件
2019/08/07 职场文书