vue2.0 如何在hash模式下实现微信分享


Posted in Javascript onJanuary 22, 2019

最近又把vue的demo拿出来整理下,正好要做“微信分享”功能,于是遇到新的问题;

由于hash模式下,带有“#”,导致微信分享的签证无效;当改成history的模式后,分享ok;

但是问题来了,history模式下相当操蛋:

  • 刷新页面,页面报错404;这不是扯犊子吗?【不过这个问题,可以在后台解决,这里就不说了】
  • assets下的img文件,引入路径失败;

对于上面的问题,我是直接不能忍啊,所以history模式是肯定不行的;我决定依旧用hash模式;history模式万万要不得

那么问题来了:怎么在hash模式下实现微信分享?

其实微信分享失败的问题,最重要的一步就是解决“#”的问题;

一般的页面,我们获取当前的url是酱紫操作的

let params = '¶ms=' + JSON.stringify({url: window.location.href});

SPA页面,我们需要做点小调整,调整的目的是让“#”say goodbye

let params = '¶ms=' + JSON.stringify({url: encodeURIComponent(window.location.href.split('#')[0])});

这样修改后,签名的url中没带“#”,这样就ok了,下面贴上完成的代码

<script>
// 微信分享
import configModel from "../models/config.model";
import elementService from "../services/element.service";

class ShareService{
 wxShare(succCb, cancelCb, errorCb){
  let baseUrl = 'http://q.letwx.com/api/jsapi?action=jscfg';
  let samekey = '&uid=' + configModel.uid + '&wxapiopenid=' + configModel.apiopenid + '&wxapitoken=' + configModel.apitoken + '&debug=nf';
  let params = '¶ms=' + JSON.stringify({url: encodeURIComponent(window.location.href.split('#')[0])}); // 这里是关键
  let url = baseUrl + params + samekey;
  $.post(url, data => {
   elementService.loadingHide();
   console.log(data);
   switch (data.error) {
    case 0:
     this.wxConfig(data.cfg, configModel.shareInfo, succCb, cancelCb, errorCb);
     break;
    default:
     elementService.message(data.error_msg, 'error');
     break;
   }
  }, 'json');
 }
 wxConfig(wxconfig, share, succCb, cancelCb, errorCb){
  wx.config({
   debug: false,
   appId: wxconfig.appId,
   timestamp: wxconfig.timestamp,
   nonceStr: wxconfig.nonceStr,
   signature: wxconfig.signature,
   jsApiList: [
    'onMenuShareTimeline',
    'onMenuShareAppMessage',
    'onMenuShareQQ',
    'onMenuShareWeibo'
   ]
  });
  wx.ready(function() {
   wx.onMenuShareAppMessage({ //朋友
    title: share.title,
    desc: share.desc,
    link: share.link,
    imgUrl: share.imgUrl,
    success: function() {
     succCb && succCb();
    },
    cancel: function() {
     cancelCb && cancelCb();
    }
   });
   wx.onMenuShareTimeline({ //朋友圈
    title: share.desc,
    link: share.link,
    imgUrl: share.imgUrl,
    success: function() {
     succCb && succCb();
    },
    cancel: function() {
     cancelCb && cancelCb();
    }
   });
   wx.onMenuShareQQ({ //QQ
    title: share.title,
    desc: share.desc,
    link: share.link,
    imgUrl: share.imgUrl,
    success: function() {
     succCb && succCb();
    },
    cancel: function() {
     cancelCb && cancelCb();
    }
   });
   wx.onMenuShareWeibo({ //QQ
    title: share.title,
    desc: share.desc,
    link: share.link,
    imgUrl: share.imgUrl,
    success: function() {
     succCb && succCb();
    },
    cancel: function() {
     cancelCb && cancelCb();
    }
   });
  });
  wx.error(function(res) {
   console.log(res);
   errorCb && errorCb(JSON.stringify(res));
  });
 }
}

let shareSerivice = new ShareService();
export default shareSerivice;
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js小技巧--自动隐藏红叉叉
Aug 13 Javascript
jQuery移动端图片上传组件
Jun 12 Javascript
jquery datatable服务端分页
Aug 31 Javascript
AngularJS递归指令实现Tree View效果示例
Nov 07 Javascript
Vue波纹按钮组件制作
Apr 30 Javascript
JavaScript时间与时间戳的转换操作实例分析
Dec 07 Javascript
微信小程序与后台PHP交互的方法实例分析
Dec 10 Javascript
vue+mock.js实现前后端分离
Jul 24 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
Feb 12 Javascript
vue-cli设置publicPath小记
Apr 14 Javascript
详解js中的原型,原型对象,原型链
Jul 16 Javascript
vue中element 的upload组件发送请求给后端操作
Sep 07 Javascript
JavaScript继承与聚合实例详解
Jan 22 #Javascript
JavaScript格式化json和xml的方法示例
Jan 22 #Javascript
基于vue的验证码组件的示例代码
Jan 22 #Javascript
JavaScript中的&quot;=、==、===&quot;区别讲解
Jan 22 #Javascript
深入分析element ScrollBar滚动组件源码
Jan 22 #Javascript
js实现京东秒杀倒计时功能
Jan 21 #Javascript
vue.js的vue-cli脚手架中使用百度地图API的实例
Jan 21 #Javascript
You might like
文章推荐系统(二)
2006/10/09 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
[原创]静态页面也可以实现预览 列表不同的显示方式
2006/10/14 Javascript
javascript preload&amp;lazy load
2010/05/13 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
window.onload使用指南
2015/09/13 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
Js面试算法详解
2018/04/08 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
微信小程序整个页面的自动适应布局的实现
2020/07/12 Javascript
Jquery 获取相同NAME 或者id删除行操作
2020/08/24 jQuery
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
Vue开发中常见的套路和技巧总结
2020/11/24 Vue.js
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
详解python中list的使用
2019/03/15 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
python访问hdfs的操作
2020/06/06 Python
英国门把手公司:Door Handle Company
2019/05/12 全球购物
怎样在程序里获得一个空指针
2015/01/24 面试题
C#公司笔试题
2014/03/28 面试题
大学在校生求职信范文
2013/11/21 职场文书
大学自主招生自荐信
2013/12/16 职场文书
委托书格式要求
2015/01/28 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS
python数字类型和占位符详情
2022/03/13 Python