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中全局函数each使用介绍
Dec 10 Javascript
jquery遍历checkbox的注意事项说明
Feb 21 Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 Javascript
JavaScript中的console.dir()函数介绍
Dec 29 Javascript
js命名空间写法示例
Dec 18 Javascript
jQuery Easyui快速入门教程
Aug 21 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
Oct 24 Javascript
node+vue实现用户注册和头像上传的实例代码
Jul 20 Javascript
vue elementui el-form rules动态验证的实例代码详解
May 23 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 Javascript
解决vue中provide inject的响应式监听
Apr 19 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 获取mysql数据库信息代码
2009/03/12 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
Symfony2开发之控制器用法实例分析
2016/02/05 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
[原创]图片分页查看
2006/08/28 Javascript
做网页的一些技巧(续)
2007/02/01 Javascript
js继承 Base类的源码解析
2008/12/30 Javascript
ie focus bug 解决方法
2009/09/03 Javascript
javascript陷阱 一不小心你就中招了(字符运算)
2013/11/10 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
JavaScript实现Flash炫光波动特效
2015/05/14 Javascript
jQuery实现dialog设置focus焦点的方法
2015/06/10 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
使用JS来动态操作css的几种方法
2019/12/18 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
python多进程使用函数封装实例
2020/05/02 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
韩国现代百货官网:Hmall
2018/03/21 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
单位未婚证明范本
2014/01/18 职场文书
群众路线教育实践活动方案
2014/02/02 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
瞿秋白纪念馆观后感
2015/06/10 职场文书