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生成随机数的方法
May 16 Javascript
Google Maps API地图应用示例分享
Oct 23 Javascript
Bootstrap实现下拉菜单效果
Apr 29 Javascript
基于BootStrap的图片轮播效果展示实例代码
May 23 Javascript
jQuery实现按钮点击遮罩加载及处理完后恢复的效果
Jun 07 Javascript
js简单实现调整网页字体大小的方法
Jul 23 Javascript
JS实现鼠标移上去显示图片或微信二维码
Dec 14 Javascript
js模拟百度模糊搜索的实例
Aug 04 Javascript
three.js 入门案例详解
Jan 23 Javascript
Vue 去除路径中的#号
Apr 19 Javascript
Vue 子组件与数据传递问题及注意事项
Jul 11 Javascript
js实现前端界面导航栏下拉列表
Aug 27 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网页游戏学习之Xnova(ogame)源码解读(五)
2014/06/23 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
详解Laravel视图间共享数据与视图Composer
2016/08/04 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
2016/10/10 PHP
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
jQuery 表单验证扩展代码(二)
2010/10/20 Javascript
js为数字添加逗号并格式化数字的代码
2013/08/23 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
采用自执行的匿名函数解决for循环使用闭包的问题
2014/09/11 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
AngularJS实现的JSONP跨域访问数据传输功能详解
2017/07/20 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
Python中工作日类库Busines Holiday的介绍与使用
2017/07/06 Python
使用tensorflow实现AlexNet
2017/11/20 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
python3大文件解压和基本操作
2017/12/15 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
Python3内置模块之json编解码方法小结【推荐】
2020/12/09 Python
python 两个数据库postgresql对比
2019/10/21 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
香港化妆品经销商:我的公主
2016/08/05 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
计算机专业优秀大学生自我总结
2014/01/21 职场文书
销售人员求职信
2014/07/22 职场文书
客户经理岗位职责
2015/01/31 职场文书
技术员个人工作总结
2015/03/03 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python