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 相关文章推荐
基于jquery的滚动鼠标放大缩小图片效果
Oct 27 Javascript
js动态控制table的tr、td增加及删除的具体实现
Apr 30 Javascript
中文输入法不触发onkeyup事件的解决办法
Jul 09 Javascript
jquery实现表单输入时提示文字滑动向上效果
Aug 10 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
May 17 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
AngularJS页面带参跳转及参数解析操作示例
Jun 28 Javascript
深入理解vue $refs的基本用法
Jul 13 Javascript
微信小程序实现默认第一个选中变色效果
Jul 17 Javascript
axios对请求各种异常情况处理的封装方法
Sep 25 Javascript
Vue表单之v-model绑定下拉列表功能
May 14 Javascript
vue实现标签云效果的示例
Nov 09 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
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
javascript:void(0)是什么意思及href=#与href=javascriptvoid(0)的区别
2015/11/13 Javascript
正则表达式替换html元素属性的方法
2016/11/26 Javascript
前端面试知识点锦集(JavaScript篇)
2016/12/28 Javascript
原生Javascript插件开发实践
2017/01/18 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
ReactNative页面跳转Navigator实现的示例代码
2017/08/02 Javascript
jQuery加PHP实现图片上传并提交的示例代码
2020/07/16 jQuery
python读取浮点数和读取文本文件示例
2014/05/06 Python
Python多线程编程(二):启动线程的两种方法
2015/04/05 Python
详解tensorflow实现迁移学习实例
2018/02/10 Python
Python从零开始创建区块链
2018/03/06 Python
python的pip安装以及使用教程
2018/09/18 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
python导包的几种方法(自定义包的生成以及导入详解)
2019/07/15 Python
解决Django中调用keras的模型出现的问题
2019/08/07 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
使用Python防止SQL注入攻击的实现示例
2020/05/21 Python
详解Python多线程下的list
2020/07/03 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
《夸父追日》教学反思
2016/02/20 职场文书
小学教师教学反思
2016/02/24 职场文书
python脚本框架webpy的url映射详解
2021/11/20 Python
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技