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 相关文章推荐
本地对象Array的原型扩展实现代码
Dec 04 Javascript
基于jquery的地址栏射击游戏代码
Mar 10 Javascript
jQuery.holdReady()方法用法实例
Dec 27 Javascript
jQuery向后台传入json格式数据的方法
Feb 13 Javascript
浅析javascript中的DOM
Mar 01 Javascript
javascript中new关键字详解
Dec 14 Javascript
javascript创建对象、对象继承的实用方式详解
Mar 08 Javascript
用Vue.js实现监听属性的变化
Nov 17 Javascript
详解vue与后端数据交互(ajax):vue-resource
Mar 16 Javascript
原生JS实现的简单轮播图功能【适合新手】
Aug 17 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
Aug 17 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 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
phpphp图片采集后按原路径保存图片示例
2014/02/18 PHP
PHP获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
php curl 上传文件代码实例
2015/04/27 PHP
基于jquery的Repeater实现代码
2010/07/17 Javascript
基于jQuery创建鼠标悬停效果的方法
2015/03/07 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
Javascript基于jQuery UI实现选中区域拖拽效果
2016/11/25 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
2016/12/13 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
基于jQuery实现无缝轮播与左右点击效果
2018/05/13 jQuery
Vue前后端不同端口的实现方法
2018/09/19 Javascript
JS使用栈判断给定字符串是否是回文算法示例
2019/03/04 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
vue中的使用token的方法示例
2020/03/10 Javascript
Python中的模块和包概念介绍
2015/04/13 Python
详解Python的Lambda函数与排序
2016/10/25 Python
Django自定义用户认证示例详解
2018/03/14 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
初中三好学生事迹材料
2014/01/13 职场文书
三年大学生活自我鉴定
2014/01/21 职场文书
异地年检委托书范本
2014/09/24 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
导游欢迎词范文
2015/01/23 职场文书
小人国观后感
2015/06/11 职场文书
《法国号》教学反思
2016/02/22 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
Tomcat弱口令复现及利用
2022/05/06 Servers