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 相关文章推荐
javascript 解决表单仍然提交即使监听处理函数返回false
Mar 14 Javascript
JQuery live函数
Dec 24 Javascript
JavaScript将相对地址转换为绝对地址示例代码
Jul 19 Javascript
创建、调用JavaScript对象的方法集锦
Dec 24 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
Jan 22 Javascript
VueJS全面解析
Nov 10 Javascript
BootStrap3使用错误记录及解决办法
Dec 22 Javascript
Angular 4环境准备与Angular cli创建项目详解
May 27 Javascript
js实现音乐播放控制条
Sep 09 Javascript
详解webpack2异步加载套路
Sep 14 Javascript
JS+CSS3实现的简易钟表效果示例
Apr 13 Javascript
TypeScript之调用栈的实现
Dec 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获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
DIV菜单层实现代码
2010/11/19 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
2014/01/10 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
JS简单实现表格排序功能示例
2016/12/20 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
js实现图片360度旋转
2017/01/22 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
JS+HTML5 FileReader实现文件上传前本地预览功能
2020/03/27 Javascript
vue.js评论发布信息可插入QQ表情功能
2017/08/08 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
2017/12/25 jQuery
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
Python编程中实现迭代器的一些技巧小结
2016/06/21 Python
python如何实现反向迭代
2018/03/20 Python
基于python历史天气采集的分析
2019/02/14 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
高校学生干部的自我评价分享
2013/11/04 职场文书
单位在职证明范本
2014/01/09 职场文书
20年同学聚会感言
2014/02/03 职场文书
高中学生评语大全
2014/04/25 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
教师党员批评与自我批评发言稿
2014/10/15 职场文书
2014年学校党建工作总结
2014/11/11 职场文书
2014年少先队工作总结
2014/12/03 职场文书