// 问题描述在微信中分享到朋友圈或好友时,分享出去的路由被破坏,打开分享的链接,路由中的“#”会被去掉并追加?from= & Timeline= 之类的后缀参数,这就造成了分享出去的链接只能进入首页,无法正常跳转到其他路由。

//该问题产生的原因可能是由于vue的hash模式,微信浏览器只记录了第一次访问的页面,而跳转路由改的hash值,浏览器并没有把他识别为一个新的页面链接,导致每次分享的链接都会跳到初次访问的页面。

//此处我的解决方案是在每个页面加载的时候都调用微信的api获取签名

//二次分享签名失败的解决方法需要后台从Refere中获取链接 换取签名

import axios from 'axios'
const rootPath = process.env.NODE_ENV === 'development'
? `/api`
: ``
export default {
wxShowMenu : function() {
var href = window.location.href.split('#')[0];
//删除二次分享时微信在链接中拼接的部分(该部分当时考虑的是解决二次分享签名失败,但是并没有起效,需要后台从Refere中获取链接)
if(href.indexOf('?from=singlemessage&isappinstalled=0') > -1) {
href = href.replace('?from=singlemessage&isappinstalled=0', '')
}else if(href.indexOf('?from=timeline&isappinstalled=0') > -1) {
href = href.replace('?from=timeline&isappinstalled=0', '')
}else if(href.indexOf('?from=groupmessage&isappinstalled=0') > -1) {
href = href.replace('?from=groupmessage&isappinstalled=0', '')
};
axios.get(rootPath + `/weixin/jsSignature?url=` + href).then((res) => {
wx.config({
debug: false,
appId: res.data.appid,
timestamp: res.data.timestamp,
nonceStr: res.data.noncestr,
signature: res.data.signature,
jsApiList: [
'onMenuShareAppMessage',
'onMenuShareTimeline'
]
});
wx.ready(function () { // 分享给朋友
wx.onMenuShareAppMessage({
title: '', // 分享标题
desc: "", // 分享描述
link: window.location.href.split('#')[0]+'#'+window.location.href.split('#')[1], // 分享链接
imgUrl: '', // 分享图标
type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// window.alert('已分享给好友');
},
cancel: function () {
// 用户取消分享后执行的回调函数
},
fail: function (res) {
// window.alert(JSON.stringify(res));
}
}); // 分享到朋友圈
wx.onMenuShareTimeline({
title: '', // 分享标题
desc: "", // 分享描述
link: window.location.href.split('#')[0]+'#'+window.location.href.split('#')[1], // 分享链接
success: function () {
// window.alert('已分享到朋友圈');
},
cancel: function () {
},
fail: function (res) {
// window.alert(JSON.stringify(res));
}
});
});
})
}
}

//main.js中注册全局方法

import WXConfig from './assets/js/wxApi' // 微信分享

Vue.prototype.WXConfig = WXConfig;

//在需要分享的页面中初始化时调用

mounted() {
this.WXConfig.wxShowMenu();
}

关于Vue单页面实现微信分享的Bug的更多相关文章

  1. [转] 2017-11-20 发布 另辟蹊径:vue单页面,多路由,前进刷新,后退不刷新

    目的:vue-cli构建的vue单页面应用,某些特定的页面,实现前进刷新,后退不刷新,类似app般的用户体验.注: 此处的刷新特指当进入此页面时,触发ajax请求,向服务器获取数据.不刷新特指当进入此 ...

  2. 另辟蹊径:vue单页面,多路由,前进刷新,后退不刷新

    目的:vue-cli构建的vue单页面应用,某些特定的页面,实现前进刷新,后退不刷新,类似app般的用户体验.注: 此处的刷新特指当进入此页面时,触发ajax请求,向服务器获取数据.不刷新特指当进入此 ...

  3. vue单页面应用中动态修改title

    https://www.jianshu.com/p/b980725b62e8 https://www.npmjs.com/package/vue-wechat-title 详细信息查看:vue-wea ...

  4. vue history模式 ios微信分享坑

    vue history模式 ios微信分享坑 问题分析:因为苹果分享会是调取签名失败是因为:苹果在微信中浏览器机制和安卓不同,有IOS缓存问题,和IOS对单页面的优化问题,通俗点说安卓进行页面跳转分享 ...

  5. [转]Vue项目全局配置微信分享思路详解

    这篇文章给大家介绍了vue项目全局配置微信分享思路讲解,使用vue作为框架,使用vux作为ui组件库,具体内容详情大家跟随脚本之家小编一起学习吧 这个项目为移动端项目,主要用于接入公众号服务.项目采用 ...

  6. Vue单页面骨架屏实践

    github 地址: VV-UI/VV-UI 演示地址: vv-ui 文档地址:skeleton 关于骨架屏介绍 骨架屏的作用主要是在网络请求较慢时,提供基础占位,当数据加载完成,恢复数据展示.这样给 ...

  7. 关于处理移动端Vue单页面及其内嵌兼容问题

    关于处理移动端Vue单页面及其内嵌兼容问题 question:由于最近转移了以前的H5项目,重构使用Vue单页面,导致部分手机内嵌或在微信浏览器中无法浏览,或者无法使用ajax请求:手机机型千变万化, ...

  8. 处理 Vue 单页面应用 SEO 的另一种思路

    vue-meta-info 官方地址: monkeyWangs/vue-meta-info (设置vue 单页面meta info信息,如果需要单页面SEO,可以和 prerender-spa-plu ...

  9. vue单页面打包文件大?首次加载慢?按需加载?是你打开方式不对

    部署各vue项目,走了一遍坑.... vue单页面应用刷新404 找到nginx多网站配置文件:类似nginx/sites-available/www.baidu.com server { liste ...

随机推荐

  1. anki_vector SDK源码解析(教程)

    一:最近anki vector robot开放了Python SDK,我听到的第一时间就赶快上网查了查,先抛几个官网重要链接吧: Python编程API手册及环境搭建等: https://sdk-re ...

  2. chrome添加离线插件

    1.首先用户点击谷歌浏览器右上角的自定义及控制按钮,在下拉框中选择工具选项,然后点击扩展程序来启动Chrome浏览器的扩展管理器页面. 2.在打开的谷歌浏览器的扩展管理器中用户可以看到一些已经安装程序 ...

  3. .Net 一开始就不应该搞 .Net Core

    .Net 一开始就不应该搞 .Net Core,  java 跨平台 是 java 选择的道路,  .Net 应该发挥 和 平台 紧密结合 的 优势 . 如 控件哥 所说,  微软 应该把  IIS  ...

  4. redux源码解读(一)

    redux 的源码虽然代码量并不多(除去注释大概300行吧).但是,因为函数式编程的思想在里面体现得淋漓尽致,理解起来并不太容易,所以准备使用三篇文章来分析. 第一篇,主要研究 redux 的核心思想 ...

  5. kvm中重命名虚拟机

    kvm中重命名虚拟机 1.查看虚拟机 [root@linux ~]# virsh list --all Id Name State ---------------------------------- ...

  6. 关于mysql自增主键

    对于mysql表(其他数据库没测试过) 如果定义了自增主键,并且手动设置了主键的值,那么当再次自增创建数据的时候,回在设置的主键值的基础上进行自增. 如(id是主键): 起始插入(3,1),而后手动插 ...

  7. ID 生成器 雪花算法

    https://blog.csdn.net/wangming520liwei/article/details/80843248 ID 生成器 雪花算法 2018年06月28日 14:58:43 wan ...

  8. 创建postgresql表空间

    mkdir -p /data/pg_data/tsp sudo chown -R postgres:postgres /data/pg_data/tsp 用下面的命令断开其它的链接 登陆服务器psql ...

  9. 学习笔记《Java多线程编程实战指南》三

    3.1串行.并发与并行 1.串行:一件事做完接着做下一件事. 2.并发:几件事情交替进行,统筹资源. 3.并行:几件事情同时进行,齐头并进,各自运行直到结束. 多线程编程的实质就是将任务处理方式由串行 ...

  10. Python 之 __new__() 方法与实例化

    原文链接:https://www.cnblogs.com/ifantastic/p/3175735.html __new__() 是在新式类中新出现的方法,它作用在构造方法建造实例之前,可以这么理解, ...