vue单应用在ios系统中实现微信分享功能操作


Posted in Javascript onSeptember 07, 2020

表示是第一次使用vue做单应用显目,也是在逐渐的摸索中~更是各种踩坑,各种填坑,打算写博客么?是因为不想写笔记了,嗯嗯 就是这么简单 进入正题。

刚开始做微信分享的这个功能的时候,脑补了官方文档微信JS-SDK说明文档

基础的知识不多说了,反正多看文档总是没错的~在安卓系统上面分享是没出错的,但是在ios上面问题就来了,表示无限吐槽ios,但是吐槽归吐槽,问题总是该解决的—在网上百度了很多vue单应用在ios系统中实现微信分享失败的原因以及解决方案

原因

单页面应用通过什么入口进去的 url保持不变 比如说入口是./index 后面不管页面怎么跳转 地址栏的地址都保持./index不变 这就导致微信分享的时候 地址栏的地址与当前页面的url不匹配 获取签名失败 所以分享就失败了~

解决方案

可以使用window.location.href去跳转,而不使用路由跳转,这样可以使地址栏的地址与当前页的地址一样,可以分享成功(适合分享的页面不多的情况下)

把入口地址保存在本地,等需要获取签名的时候 取出来(有效~强推!!!)

注意:sessionStorage.setItem(‘href',href); 只在刚进入单应用的时候保存!

mounted: function() {
   this.$nextTick(function() { //vue里面全部加载好了再执行的函数 (类似于setTimeout)
    this.myAddressSlots[0].defaultIndex = 0
   });
   var href = window.location.href;
   if(!sessionStorage.getItem('href')){//将入口地址保存下来 ios分享会使用
    sessionStorage.setItem('href',href);
   }
  },

在使用存在本地的url去做分享的时候,建议安卓与iOS做判断,毕竟坑的只是iOS~

var url = 'lms-service/wechat-services/wechat-share-sign';
    var curl = window.location.href;
    if (!KZ.isAndroidOrIos() && KZ.isWeiXin()) {//isAndroidOrIos()安卓true IOS为false
     curl = sessionStorage.getItem('href');
     if(!curl){
      curl = KZ_CONFIG.DOMAIN;
     }
    }

好吧 就这样 能看到这篇博文的应该都是同路人~希望能够帮助到你们,还有就是 第一次写 思绪有点乱 多多包涵哈

补充知识:vue 微信分享及ios二次微信分享invalid signature解决

我就废话不多说了,大家还是直接看代码吧~

npm install weixin-js-sdk

页面中引入

import wx from 'weixin-js-sdk'

methods: {
	init() {
		var that = this;
		var url = encodeURIComponent(window.location.href.split('#')[0]);
		http.post(api.getSdk,url,function(data){
				let appId = data.appId;
				let timestamp = data.timestamp;
				let signature = data.signature;
				let nonceStr = data.nonceStr;
				that.initwx(appId, timestamp, signature, nonceStr);
		})	
	},
 
	initwx(appId, timestamp, signature, nonceStr) {
		var link = window.location.href;
		var imgUrl = 'https格式的图片'
		var shareData = {
			"imgUrl": imgUrl,// 分享显示的缩略图地址 ,根据自己情况而定
			"link": link,// 分享地址
			"desc": '描述',// 分享描述
			"title": '标题'// 分享标题
		};
		wx.config({
			debug: false,//调试模式
			appId: appId,// 公众号的唯一标识
			timestamp: timestamp,//生成签名的时间戳
			nonceStr: nonceStr,//生成签名的随机串
			signature: signature,
			jsApiList: ['onMenuShareTimeline', //
			'onMenuShareAppMessage'] //
		});
		wx.checkJsApi({
			jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage']
		});
		wx.ready(function() {
			wx.onMenuShareTimeline(shareData); //分享到朋友圈
			wx.onMenuShareAppMessage(shareData); //分享给朋友
		});
	}
},
created(){
  this.init();
},

备注:ios第二次分享 会出现invalid signature

原因分享后出现微信会在链接会自动加以下字符串,再次签名的时候,因为&特殊字符传给后台,后台未处理,需要对链接encodeURIComponent处理,就不会出现invalid问题

朋友圈 from=timeline&isappinstalled=0

微信群 from=groupmessage&isappinstalled=0

好友分享 from=singlemessage&isappinstalled=0

以上这篇vue单应用在ios系统中实现微信分享功能操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 加载和执行-性能提高篇
Dec 28 Javascript
JS如何将UTC格式时间转本地格式
Sep 04 Javascript
node.js中的fs.readdirSync方法使用说明
Dec 17 Javascript
深入解读JavaScript中的Iterator和for-of循环
Jul 28 Javascript
鼠标悬停小图标显示大图标
Jan 22 Javascript
JS实现对中文字符串进行utf-8的Base64编码的方法(使其与Java编码相同)
Jun 21 Javascript
老生常谈JQuery data方法的使用
Sep 09 Javascript
Bootstrap基本组件学习笔记之进度条(15)
Dec 08 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
May 07 Javascript
转换layUI的数据表格中的日期格式方法
Sep 19 Javascript
JsonProperty 的使用方法详解
Oct 11 Javascript
react 生命周期实例分析
May 18 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
Sep 07 #Javascript
一篇文章带你从零快速上手Rollup
Sep 07 #Javascript
基于vue hash模式微信分享#号的解决
Sep 07 #Javascript
在项目vue中使用echarts的操作步骤
Sep 07 #Javascript
解决vue加scoped后就无法修改vant的UI组件的样式问题
Sep 07 #Javascript
Vue.js原理分析之nextTick实现详解
Sep 07 #Javascript
小程序实现可拖动的悬浮按钮
Sep 07 #Javascript
You might like
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
php数据类型判断函数有哪些
2013/09/23 PHP
destoon二次开发常用数据库操作
2014/06/21 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
php 二维数组时间排序实现代码
2016/11/19 PHP
JQuery 学习笔记 选择器之四
2009/07/23 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
详解堆的javascript实现方法
2016/11/29 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
使用bat打开多个cmd窗口执行gulp、node
2017/02/17 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
JS关于刷新页面的相关总结
2018/05/09 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
vue-router重写push方法,解决相同路径跳转报错问题
2020/08/07 Javascript
javascript使用canvas实现饼状图效果
2020/09/08 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
python根据出生日期返回年龄的方法
2015/03/26 Python
Python中交换两个元素的实现方法
2018/06/29 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
微信公众号token验证失败解决方案
2019/07/22 Python
python3 selenium自动化 下拉框定位的例子
2019/08/23 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
pycharm使用技巧之自动调整代码格式总结
2020/11/04 Python
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
联想C++笔试题
2012/06/13 面试题
青春演讲稿范文
2014/05/08 职场文书
应届大学生自荐书
2014/06/17 职场文书
护士求职信
2014/07/05 职场文书
教育合作协议范本
2014/10/17 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python