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 相关文章推荐
DEFER怎么用?
Jul 01 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
Mar 01 Javascript
javascript 小数取整简单实现方式
May 30 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
关于JavaScript作用域你想知道的一切
Feb 04 Javascript
Javascript基础回顾之(二) js作用域
Jan 31 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
Mar 22 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
Apr 17 jQuery
微信小程序 rich-text的使用方法
Aug 04 Javascript
JS中图片压缩的方法小结
Nov 14 Javascript
JavaScript栈和队列相关操作与实现方法详解
Dec 07 Javascript
详解写好JS条件语句的5条守则
Feb 28 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开发大型项目的一点经验
2006/10/09 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
PHP编程入门的基本语法知识点总结
2016/01/26 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
javascript smipleChart 简单图标类
2011/01/12 Javascript
禁止ajax缓存获取程序最新数据的方法
2013/11/19 Javascript
JS设置获取cookies的方法
2014/01/26 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
Python获取脚本所在目录的正确方法
2014/04/15 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
Python 装饰器使用详解
2017/07/29 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
Python读取配置文件(config.ini)以及写入配置文件
2020/04/08 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
解决Python import .pyd 可能遇到路径的问题
2021/03/04 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
css3实现简单的白云飘动背景特效
2020/10/28 HTML / CSS
最新远光软件笔试题面试题内容
2013/11/08 面试题
颁奖典礼主持词
2014/03/25 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
求职简历自荐信怎么写
2015/03/26 职场文书
学校财务管理制度
2015/08/04 职场文书
【2·13】一图读懂中国无线电发展
2022/02/18 无线电
讲解MySQL增删改操作
2022/05/06 MySQL