vue2.0 如何在hash模式下實現微信分享

最近又把vue的demo拿出來整理下,正好要作「微信分享」功能,因而遇到新的問題;vue

因爲hash模式下,帶有「#」,致使微信分享的簽證無效;當改爲history的模式後,分享ok;json

可是問題來了,history模式下至關操蛋:api

  • 刷新頁面,頁面報錯404;這不是扯犢子嗎?【不過這個問題,能夠在後臺解決,這裏就不說了】
  • assets下的img文件,引入路徑失敗;

對於上面的問題,我是直接不能忍啊,因此history模式是確定不行的;我決定依舊用hash模式;history模式萬萬要不得微信

那麼問題來了:怎麼在hash模式下實現微信分享?

其實微信分享失敗的問題,最重要的一步就是解決「#」的問題;app

通常的頁面,咱們獲取當前的url是醬紫操做的ide

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

SPA頁面,咱們須要作點小調整,調整的目的是讓「#」say goodbyepost

let params = '&params=' + JSON.stringify({url: encodeURIComponent(window.location.href.split('#')[0])});

這樣修改後,簽名的url中沒帶「#」,這樣就ok了,下面貼上完成的代碼ui

<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>
相關文章
相關標籤/搜索