// 问题描述在微信中分享到朋友圈或好友时,分享出去的路由被破坏,打开分享的链接,路由中的“#”会被去掉并追加?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. The 19th Zhejiang University Programming Contest Sponsored by TuSimple (Mirror)

    http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=391 A     Thanks, TuSimple! Time ...

  2. 软件可维护性的影响因素&如何提升

    影响因素: 1.可理解性 2.可测试性 3.可修改性 4.可移植性 5.可重用性 如何提升: 1.建立明确的软件质量目标2.使用先进的软件开发技术和工具3.建立明确的质量保证4.选择可维护的语言5.改 ...

  3. 学习笔记DL001:数学符号、深度学习的概念

    数学符号. 数和数组.

  4. 使用python读取MS-SQL数据库

    使用python读取MS-SQL中的数据,这里使用到模板pymssql. 因为不是python自带的模板,所以首先需要使用pip安装,对应命令:pip install pymssql 建立main.p ...

  5. MySQL1-安装

    MySQL 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据. 我们也可以将数据 ...

  6. 解决C#程序只允许运行一个实例的几种方法详解

    解决C#程序只允许运行一个实例的几种方法详解 本篇文章是对C#中程序只允许运行一个实例的几种方法进行了详细的分析介绍,需要的朋友参考下 本文和大家讲一下如何使用C#来创建系统中只能有该程序的一个实例运 ...

  7. xmind 8 便携版:关联文件后,双击打开文件,在当前文件夹产生configuration子文件的问题解决办法

    Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\.xmind] @="XMind.Workbook.3" " ...

  8. Java Socket NIO

    服务端: public class NIOServer { private static final String HOST = "localhost"; private stat ...

  9. WinHTTrack Website Copier使用说明

    WinHTTrack Website Copier使用说明 WinHTTrack Website Copier可以抓取整个网站或者某个网页.某个论坛帖子.以抓取论坛某个主题帖子为例: 1.打开WinH ...

  10. kali syn洪水攻击实例

    kali 172.30.2.241 受攻击:172.30.2.242 syn攻击造成对方cpu跑满 基本上丧失工作能力 攻击语句