vue引入微信sdk 实现分享朋友圈获取地理位置功能


Posted in Javascript onJuly 04, 2019

最近入职的公司主要做微信端的h5,所以在所难免要引用sdk。虽然官方文档写的还算清楚,但是还是有坑。

1.在index.html中 引入微信sdk

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>

2.在assets/js 下新建文件 wx.js

export default {
 wxShowMenu: function (that,sign='') {
  let url = window.location.href.split('#')[0]
  that.$http.post('/xxx', //请求你们公司后台的接口 获取相关的配置
   that.$getSingQuery({
    appKey: 'xxx',
    url
   }))
   .then(res => {
    var getMsg = res.data.data;
    // console.log('微信配置----------')
    // console.log(res.data)
    wx.config({
     debug: false, //生产环境需要关闭debug模式  测试环境下可以设置为true 可以在开发者工具中查看问题
     appId: getMsg.appid, //appId通过微信服务号后台查看
     timestamp: getMsg.timestamp, //生成签名的时间戳
     nonceStr: getMsg.noncestr, //生成签名的随机字符串
     signature: getMsg.sign, //签名
     jsApiList: [ //需要调用的JS接口列表
      'updateAppMessageShareData', //自定义“分享给朋友”及“分享到QQ”按钮的分享内容(1.4.0) 新接口
      'updateTimelineShareData', //自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容(1.4.0) 老接口
      'onMenuShareTimeline', //分享到朋友圈 老接口
      'onMenuShareAppMessage',//分享给盆友 老接口
      'getLocation' //获取定位
     ]
    });
    wx.error(function (res) {
     // alert(JSON.stringify(res))
     console.log(res)
     // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    });
    wx.ready(function () {
     if(sign=='location'){ //由于 获取定位往往是页面一加载 就提示获取地理位置 所以可以直接在写在 wx.ready
      wx.getLocation({
       type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
       success: function (res) {
        var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
        var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
        var speed = res.speed; // 速度,以米/每秒计
        var accuracy = res.accuracy; // 位置精度
        that.latitude=res.latitude;
        that.longitude=res.longitude;
        that.geocodeRegeo()//逆地理编码 调用你vue实例里的方法
        do something...
       }
      });
     }
    });
   })
   .catch(error => {
    alert(error)
    console.log(error)
   })
 }
}

3.在main.js 将WXConfig绑在vue原型上 这样哪个页面需要初始化 直接通过原型就可以拿到

import WXConfig from './assets/js/wx' //微信分享
Vue.prototype.WXConfig = WXConfig

4.在需要的页面 进行初始化

微信JS-SDK说明文档:同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用。

所以 我们在你需要的页面 mounted 时, this.WXConfig.wxShowMenu(this); 调用就可以。

我这里将this传入 只是为了能直接在wx.js 调用vue上的一些方法。比如axios

mounted: function () {
  this.WXConfig.wxShare(this);
 },

通过按钮自定义触发

html

<div class="fxbox bor_b"
   @click="shareFriend">分享给朋友</div>
<div class="fxbox bor_b"
   @click="shareFriendCircle">分享到朋友圈</div>

js

shareFriendCircle () {
   let that = this
   wx.onMenuShareTimeline({
    title: this.dataCode.title, // 分享标题
    desc: this.dataCode.desc, //分享描述
    link: this.dataCode.link,// 分享链接
    imgUrl: this.dataCode.imgUrl, // 分享图标
    success () {
     console.log('分享给朋友圈 旧')

    }
   });
  },
    // 分享给朋友 旧
  shareFriend () {
   let that = this
   wx.onMenuShareAppMessage({
    title: this.dataCode.title, // 分享标题
    desc: this.dataCode.desc, //分享描述
    link: this.dataCode.link,// 分享链接
    imgUrl: this.dataCode.imgUrl, // 分享图标
    success () {
     console.log('分享给朋友 旧')
    }
   });
  },

5.新老接口的区别

新接口 
  'updateAppMessageShareData' //自定义“分享给朋友”及“分享到QQ”按钮的分享内容(1.4.0) 
  'updateTimelineShareData',//自定义“分享到朋友圈”及“分享到QQ空间”按钮的分享内容(1.4.0)
老接口
  'onMenuShareTimeline', //分享到朋友圈 
  'onMenuShareAppMessage',//分享给盆友

注意

新接口中的 success 回调函数 指的是 你的那些title desc... 自定义设置成功 了的回调函数,而不是用户主动点击微信右上角的三个点,点击分享给朋友或者朋友圈,分享成功的回调函数。
老接口 success 回调函数 是指 用户成功分享 给朋友或者朋友圈的回调函数
经测试 使用新接口 在 ios 下表现正常 ,在 部分安卓机下失效 了

建议使用老接口 无此问题

6.补充

还有一点, link: this.dataCode.link,// 分享链接

该链接域名或路径必须与当前页面对应的公众号JS安全域名一致

总结

以上所述是小编给大家介绍的vue引入微信sdk 实现分享朋友圈获取地理位置功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
jQuery生成asp.net服务器控件的代码
Feb 04 Javascript
jQuery jqgrid 对含特殊字符json 数据的 Java 处理方法
Jan 01 Javascript
解析js如何获取当前url中的参数值并复制给input
Jun 23 Javascript
JS在Chrome浏览器中showModalDialog函数返回值为undefined的解决方法
Aug 03 Javascript
JS中如何实现点击a标签返回页面顶部的问题
Jan 19 Javascript
原生js更改css样式的两种方式
Mar 15 Javascript
解读vue生成的文件目录结构及说明
Nov 27 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
May 21 Javascript
基于vue实现图片验证码倒计时60s功能
Dec 10 Javascript
JS中准确判断变量类型的方法
Jun 01 Javascript
vue v-on:click传递动态参数的步骤
Sep 11 Javascript
js实现移动端图片滑块验证功能
Sep 29 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
Jul 04 #Javascript
微信小程序自定义弹窗实现详解(可通用)
Jul 04 #Javascript
Vue 3.x+axios跨域方案的踩坑指南
Jul 04 #Javascript
Vue.js递归组件实现组织架构树和选人功能
Jul 04 #Javascript
vue-cli配置flexible过程详解
Jul 04 #Javascript
vue动态配置模板 'component is'代码
Jul 04 #Javascript
react 移动端实现列表左滑删除的示例代码
Jul 04 #Javascript
You might like
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
php中使用GD库做验证码
2016/03/31 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
HR vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
JS 页面计时器示例代码
2013/10/28 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
javascript实现完美拖拽效果
2015/05/06 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
2016/08/30 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
2017/04/12 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
Vue入门之数据绑定(小结)
2018/01/08 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
python 从远程服务器下载日志文件的程序
2013/02/10 Python
python抓取某汽车网数据解析html存入excel示例
2013/12/04 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
解决Tensorboard 不显示计算图graph的问题
2020/02/15 Python
Python hashlib模块的使用示例
2020/10/09 Python
关键字throw与throws的用法差异
2016/11/22 面试题
毕业生找工作的求职信范文
2013/12/24 职场文书
学术会议邀请函
2015/01/30 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
JS实现扫雷项目总结
2021/05/19 Javascript
SQL语句多表联合查询的方法示例
2022/04/18 MySQL
Golang 链表的学习和使用
2022/04/19 Golang