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 相关文章推荐
js有序数组的连接问题
Oct 01 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
Oct 14 Javascript
JS获取客户端IP地址、MAC和主机名的7个方法汇总
Jul 21 Javascript
JavaScript检测字符串中是否含有html标签实现方法
Jul 01 Javascript
纯js的右下角弹窗实例
Mar 12 Javascript
快速解决bootstrap下拉菜单无法隐藏的问题
Aug 10 Javascript
vue动态绑定class的几种常用方式小结
May 21 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
Jul 19 Javascript
swiper4实现移动端导航切换
Oct 16 Javascript
vue data恢复初始化数据的实现方法
Oct 31 Javascript
原生js实现日期选择插件
May 21 Javascript
如何理解Vue简单状态管理之store模式
May 15 Vue.js
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
PHP4实际应用经验篇(1)
2006/10/09 PHP
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
PHP读取xml方法介绍
2013/01/12 PHP
php获取当前时间的毫秒数的方法
2014/01/26 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
搭建基于Docker的PHP开发环境的详细教程
2015/07/01 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
2020/07/20 Javascript
[05:08]2014DOTA2国际邀请赛 Hao专访复仇的胜利很爽
2014/07/15 DOTA
[46:16]2018DOTA2亚洲邀请赛3月30日 小组赛B组 iG VS VP
2018/03/31 DOTA
在Django的模型和公用函数中使用惰性翻译对象
2015/07/27 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
Python内置random模块生成随机数的方法
2019/05/31 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
python统计文章中单词出现次数实例
2020/02/27 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
深入理解Python变量的数据类型和存储
2021/02/01 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
中科前程Java笔试题
2016/11/20 面试题
高中三年学习生活的自我评价
2013/10/10 职场文书
党风廉设责任书
2014/04/16 职场文书
高中学生期末评语
2014/04/25 职场文书
七一建党节演讲稿
2014/09/11 职场文书
党员作风建设自查报告
2014/10/23 职场文书
离婚协议书的范本
2015/01/27 职场文书
军事博物馆观后感
2015/06/05 职场文书
《草船借箭》教学反思
2016/02/23 职场文书
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript