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 Ext JS 状态默认存储时间
Feb 15 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
Nov 02 Javascript
JQuery入门——用bind方法绑定事件处理函数应用介绍
Feb 05 Javascript
Jquery实现弹出层分享微博插件具备动画效果
Apr 03 Javascript
JavaScript事件委托的技术原理探讨示例
Apr 17 Javascript
JS计算网页停留时间代码
Apr 28 Javascript
jQuery的缓存机制浅析
Jun 07 Javascript
Sort()函数的多种用法
Mar 20 Javascript
手机端js和html5刮刮卡效果
Sep 29 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
Jan 27 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
clipboard.js在移动端复制失败的解决方法
Jun 13 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 fsockopen写的HTTP下载的类
2007/02/22 PHP
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
php 调试利器debug_print_backtrace()
2012/07/23 PHP
php生成图形验证码几种方法小结
2013/08/15 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
Smarty3配置及入门语法
2017/02/22 PHP
Javascript 事件流和事件绑定
2009/07/16 Javascript
javascript window对象属性整理
2009/10/24 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
2016/11/10 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用
2017/05/10 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
JS实现简单的选择题测评系统代码思路详解(demo)
2017/09/03 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
深入解读Node.js中的koa源码
2019/06/17 Javascript
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
ES6基础之字符串和函数的拓展详解
2019/08/22 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
openLayer4实现动态改变标注图标
2020/08/17 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
英国建筑用品在线:Building Supplies Online(BSO)
2018/04/30 全球购物
企业优秀团员事迹材料
2014/08/20 职场文书
党校学习心得体会范文
2014/09/09 职场文书
如何利用Python实现一个论文降重工具
2021/07/09 Python
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL