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实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
Apr 20 Javascript
javascript qq右下角滑出窗口 sheyMsg
Mar 21 Javascript
HTML DOM的nodeType值介绍
Mar 31 Javascript
基于jQuery实现自动轮播旋转木马特效
Nov 02 Javascript
轻松学习Javascript闭包函数
Dec 15 Javascript
AngularJS 过滤器(自带和自建)详解
Sep 19 Javascript
JavaScript模仿Pinterest实现图片预加载功能
Oct 25 Javascript
整理关于Bootstrap导航的慕课笔记
Mar 29 Javascript
Angularjs使用过滤器完成排序功能
Sep 20 Javascript
React Native验证码倒计时工具类分享
Oct 24 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
Apr 11 Javascript
vue如何在data中引入图片的正确路径
Jun 05 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的是与非
2013/06/05 PHP
PHP+jQuery 注册模块的改进(三):更新到Smarty3.1
2014/10/14 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
JS 实现导航栏悬停效果(续)
2013/09/24 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
巧用jQuery选择器提高写表单效率的方法
2016/08/19 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
node.js(express)中使用Jcrop进行图片剪切上传功能
2017/04/21 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
Vue3.0 响应式系统源码逐行分析讲解
2019/10/14 Javascript
整理 node-sass 安装失败的原因及解决办法(小结)
2020/02/19 Javascript
使用tensorflow实现AlexNet
2017/11/20 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
2018/04/28 Python
Python装饰器原理与用法分析
2018/04/30 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
Django视图、传参和forms验证操作
2020/07/15 Python
纯CSS3发光分享按钮的实现教程
2014/09/06 HTML / CSS
Java里面有没有全局变量?为什么?
2015/02/06 面试题
高二政治教学反思
2014/02/01 职场文书
平安建设实施方案
2014/03/19 职场文书
应聘护士求职信
2014/07/21 职场文书
优秀班主任材料
2014/12/16 职场文书
承诺函范文
2015/01/21 职场文书
培训通知
2015/04/17 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
如何使用vue3打造一个物料库
2021/05/08 Vue.js