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 清空form表单中某种元素的值
Dec 26 Javascript
利用腾讯的ip地址库做ip物理地址定位
Jul 24 Javascript
JavaScript 基本概念
Jan 20 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
Nov 25 Javascript
jquery trigger实现联动的方法
Feb 29 Javascript
Javascript基础教程之比较null和undefined值
May 16 Javascript
jQuery 获取多选框的值及多选框中文的函数
May 16 Javascript
jQuery的extend方法【三种】
Dec 14 Javascript
详解Angular 4.x NgTemplateOutlet
May 24 Javascript
慕课网题目之js实现抽奖系统功能
Sep 19 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
Aug 26 Javascript
Angular+Ionic使用queryParams实现跳转页传值的方法
Sep 05 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多文件上传实现代码
2014/02/20 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
Firefox outerHTML实现代码
2009/06/04 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
调试Node.JS的辅助工具(NodeWatcher)
2012/01/04 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
JS+CSS实现六级网站导航主菜单效果
2015/09/28 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
javascript合并表格单元格实例代码
2016/01/03 Javascript
jQuery fancybox在ie浏览器下无法显示关闭按钮的解决办法
2016/02/19 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
js使用Replace结合正则替换重复出现的字符串功能示例
2016/12/27 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
jQuery操作css样式
2017/05/15 jQuery
总结4个方面优化Vue项目
2019/02/11 Javascript
JavaScript之数组扁平化详解
2019/06/03 Javascript
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
Python部署web开发程序的几种方法
2017/05/05 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
Python3.0中普通方法、类方法和静态方法的比较
2019/05/03 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
详解如何减少python内存的消耗
2019/08/09 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
高中生家长会演讲稿
2014/01/14 职场文书
置业顾问岗位职责
2014/03/02 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书