欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vue2.0 如何在hash模式下实现微信分享

程序员文章站 2023-11-03 18:49:28
最近又把vue的demo拿出来整理下,正好要做“微信分享”功能,于是遇到新的问题; 由于hash模式下,带有“#”,导致微信分享的签证无效;当改成history的模式后,...

最近又把vue的demo拿出来整理下,正好要做“微信分享”功能,于是遇到新的问题;

由于hash模式下,带有“#”,导致微信分享的签证无效;当改成history的模式后,分享ok;

但是问题来了,history模式下相当操蛋:

  • 刷新页面,页面报错404;这不是扯犊子吗?【不过这个问题,可以在后台解决,这里就不说了】
  • assets下的img文件,引入路径失败;

对于上面的问题,我是直接不能忍啊,所以history模式是肯定不行的;我决定依旧用hash模式;history模式万万要不得

那么问题来了:怎么在hash模式下实现微信分享?

其实微信分享失败的问题,最重要的一步就是解决“#”的问题;

一般的页面,我们获取当前的url是酱紫操作的

let params = '&params=' + json.stringify({url: window.location.href});

spa页面,我们需要做点小调整,调整的目的是让“#”say goodbye

let params = '&params=' + 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 = '&params=' + 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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。