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 相关文章推荐
TFDN图片播放器 不错自动播放
Oct 03 Javascript
JavaScript 笔记二 Array和Date对象方法
May 22 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
Nov 26 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
Jan 18 Javascript
自己动手制作基于jQuery的Web页面加载进度条插件
Jun 03 Javascript
JavaScript事件详细讲解
Jun 27 Javascript
Vue组件之自定义事件的功能图解
Feb 01 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
May 13 Javascript
Vue.extend实现挂载到实例上的方法
May 01 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
May 12 Javascript
vue使用recorder.js实现录音功能
Nov 22 Javascript
解决vue请求接口第一次成功,第二次失败问题
Sep 08 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
建立动态的WML站点(二)
2006/10/09 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
php7下的filesize函数
2019/09/30 PHP
小议Function.apply() 之一------(函数的劫持与对象的复制)
2006/11/30 Javascript
javaScript 简单验证代码(用户名,密码,邮箱)
2009/09/28 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
js实现九宫格图片半透明渐显特效的方法
2015/02/16 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
微信小程序中用WebStorm使用LESS
2017/03/08 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
webpack打包js文件及部署的实现方法
2017/12/18 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
vue使用一些外部插件及样式的配置代码
2019/11/18 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
Python 自动补全(vim)
2014/11/30 Python
python安装numpy&安装matplotlib& scipy的教程
2017/11/02 Python
使用Python来开发微信功能
2018/06/13 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
浅谈Python中的bs4基础
2018/10/21 Python
python3爬虫学习之数据存储txt的案例详解
2019/04/24 Python
Python3查找列表中重复元素的个数的3种方法详解
2020/02/13 Python
批评与自我批评范文
2014/10/15 职场文书
学校运动会感想
2015/08/10 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
PHP策略模式写法
2021/04/01 PHP
浅谈redis缓存在项目中的使用
2021/05/20 Redis
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android