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 相关文章推荐
ExtJS TabPanel beforeremove beforeclose使用说明
Mar 31 Javascript
JavaScript 选中文字并响应获取的实现代码
Aug 28 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
Dec 12 Javascript
js动态添加事件并可传参数示例代码
Oct 21 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
Nov 22 Javascript
jquery获取tagName再进行判断
May 29 Javascript
jQuery操作属性和样式详解
Apr 13 Javascript
jQuery解析XML 详解及方法总结
Sep 28 Javascript
JavaScript使用math.js进行精确计算操作示例
Jun 19 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
Jun 17 Javascript
如何阻止小程序遮罩层下方图层滚动
Sep 05 Javascript
Vue+Node实现的商城用户管理功能示例
Dec 23 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 htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
php实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
php阳历转农历优化版
2016/08/08 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
jqTransform form表单美化插件使用方法
2012/07/05 Javascript
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
[03:22]DSPL第一期精彩集锦:酷炫到底!
2014/11/07 DOTA
python3 判断列表是一个空列表的方法
2018/05/04 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
python读取图片的几种方式及图像宽和高的存储顺序
2020/02/11 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
与UNIX有关的几个名词
2015/09/17 面试题
写好自荐信的要点
2013/11/06 职场文书
股权转让协议书
2014/04/12 职场文书
放飞理想演讲稿
2014/09/09 职场文书
万能检讨书2000字
2014/10/17 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
同事打架检讨书
2015/05/06 职场文书
2015年后备干部工作总结
2015/05/15 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python
MySQL基于索引的压力测试的实现
2021/11/07 MySQL
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python