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 相关文章推荐
extjs 学习笔记(三) 最基本的grid
Oct 15 Javascript
JQuery中form验证出错信息的查看方法
Oct 08 Javascript
禁止空格提交表单的js代码
Nov 17 Javascript
window.location的重写及判断location是否被重写
Sep 04 Javascript
实例讲解JavaScript中instanceof运算符的用法
Jun 08 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
Jun 12 Javascript
Angular中sweetalert弹框的基本使用教程
Jul 22 Javascript
详解jQuery-each()方法
Mar 13 jQuery
微信小程序实现轨迹回放的示例代码
Dec 13 Javascript
详解关于Vue单元测试的几个坑
Apr 26 Javascript
Vue结合路由配置递归实现菜单栏功能
Jun 16 Javascript
Vue封装Axios请求和拦截器的步骤
Sep 16 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实现ODBC数据分页显示一例
2006/10/09 PHP
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
JS event使用方法详解
2008/04/28 Javascript
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
JavaScript面向对象程序设计教程
2016/03/29 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
Angular.JS中的指令引用template与指令当做属性详解
2017/03/30 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
详解Python的单元测试
2015/04/28 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
python中执行shell的两种方法总结
2017/01/10 Python
Python实现字符串格式化输出的方法详解
2017/09/20 Python
Python虚拟环境项目实例
2017/11/20 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python实现 PS 图像调整中的亮度调整
2019/06/28 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
Django实现将一个字典传到前端显示出来
2020/04/03 Python
python如何更新包
2020/06/11 Python
贝斯特韦斯特酒店集团官网:Best Western
2019/01/03 全球购物
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
中医专业应届生求职信
2013/11/17 职场文书
工业自动化专业自荐信范文
2014/04/10 职场文书
大学生个人求职信
2014/06/02 职场文书
区长工作作风个人整改措施
2014/10/01 职场文书
搭讪开场白台词大全
2015/05/28 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
《山中访友》教学反思
2016/02/24 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL