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 相关文章推荐
Prototype Selector对象学习
Jul 23 Javascript
autoPlay 基于jquery的图片自动播放效果
Dec 07 Javascript
jquery选择器、属性设置用法经验总结
Sep 08 Javascript
IE6下拉框图层问题探讨及解决
Jan 03 Javascript
JQuery日期插件datepicker的使用方法
Mar 03 Javascript
jQuery基于Ajax方式提交表单功能示例
Feb 10 Javascript
js实现倒计时效果(小于10补零)
Mar 08 Javascript
使用Dropzone.js上传的示例代码
Oct 10 Javascript
vue页面加载闪烁问题的解决方法
Mar 28 Javascript
JavaScript对象字面量和构造函数原理与用法详解
Apr 18 Javascript
微信小程序地图实现展示线路
Jul 29 Javascript
Node.js中的异步生成器与异步迭代详解
Jan 31 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
PHP SQLite类
2009/05/07 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
浅析PHP中的i++与++i的区别及效率
2016/06/15 PHP
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
如何写好你的JavaScript【推荐】
2017/03/02 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
浅析Vue 和微信小程序的区别、比较
2018/08/03 Javascript
jQuery实现小火箭返回顶部特效
2020/02/03 jQuery
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
python中pass语句用法实例分析
2015/04/30 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
Python 多进程和数据传递的理解
2017/10/09 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
2018/01/10 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
python统计函数库scipy.stats的用法解析
2020/02/25 Python
Python-openCV开运算实例
2020/07/05 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
职业生涯规划书的格式
2013/12/29 职场文书
原材料检验岗位职责
2014/03/15 职场文书
诚信考试倡议书
2014/04/15 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
运动会方阵口号
2014/06/07 职场文书
计生个人工作总结
2015/02/28 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书