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 css styleFloat和cssFloat
Mar 15 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
May 17 Javascript
jQuery短信验证倒计时功能实现方法详解
May 25 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 Javascript
深入理解Vuex 模块化(module)
Sep 26 Javascript
JavaScript中发出HTTP请求最常用的方法
Jul 12 Javascript
vue生命周期与钩子函数简单示例
Mar 13 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
Jul 23 Javascript
axios异步提交表单数据的几种方法
Aug 11 Javascript
京东优选小程序的实现代码示例
Feb 25 Javascript
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
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加密解密函数代码
2013/06/19 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
小议Javascript中的this指针
2010/03/18 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
javascript获取选中的文本的方法代码
2013/10/30 Javascript
js中opener与parent的区别详细解析
2014/01/14 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
Vue的轮播图组件实现方法
2018/03/03 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
python获取指定网页上所有超链接的方法
2015/04/04 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
Python面向对象类的继承实例详解
2018/06/27 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
用Python开发app后端有优势吗
2020/06/29 Python
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
个人简历自我鉴定
2013/10/11 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
爱晚亭导游词
2015/02/09 职场文书
焦裕禄观后感
2015/06/03 职场文书
委托收款证明
2015/06/23 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫
我国拿下天问一号火星着陆区附近 22 个地理实体命名:平乐、西柏坡、古田、漠河等
2022/04/29 数码科技
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript