最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue項(xiàng)目history模式下微信分享爬坑總結(jié)

 更新時(shí)間:2019年03月29日 11:47:31   作者:justyeh  
這篇文章主要介紹了Vue項(xiàng)目history模式下微信分享爬坑總結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

每回遇到微信分享都是一個(gè)坑,目前的商城項(xiàng)目使用Vue開發(fā),采用history的路由模式,配置微信分享又遇到了很多問題,最后終于解決了,現(xiàn)將解決的過程分享一下。

技術(shù)要點(diǎn)

Vue,history

常見問題及說明

debug模式下報(bào)false

這個(gè)沒得說,就是調(diào)用wx.config方法的參數(shù)錯(cuò)誤造成的,請(qǐng)確認(rèn)以下事項(xiàng):

  1. 是否成功綁定了域名(域名校驗(yàn)文件要能被訪問到)
  2. 使用最新的js-sdk文件,因?yàn)槲⑿艜?huì)改部分api
  3. config方法的參數(shù)是否傳正確了(拼寫錯(cuò)誤、大小寫...)
  4. 需要使用的方法是否寫在了jsApiList中
  5. 獲取簽名的url需要decodeURIComponent
  6. 后臺(tái)的生成簽名的加密方法需要對(duì)照官方文檔

debug返回ok,分享不成功

  1. 確保代碼拼寫正確
  2. 分享鏈接域名或路徑必須與當(dāng)前頁(yè)面對(duì)應(yīng)的公眾號(hào)JS安全域名一致
  3. 接口調(diào)用需要放在wx.ready方法中

單頁(yè)項(xiàng)目(SPA)中的一些要點(diǎn)

所有需要使用JS-SDK的頁(yè)面必須先注入配置信息,否則將無法調(diào)用(同一個(gè)url僅需調(diào)用一次,對(duì)于變化url的SPA的web app可在每次url變化時(shí)進(jìn)行調(diào)用,目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實(shí)現(xiàn)web app的頁(yè)面會(huì)導(dǎo)致簽名失敗,此問題會(huì)在Android6.2中修復(fù))。

上面那段話摘自官方文檔

開發(fā)者需要注意的事項(xiàng):

  1. android和ios需要分開處理
  2. 需要在頁(yè)面url變化的時(shí)候重新調(diào)用wx.config方法,android獲取簽名的url就傳window.location.href
  3. Vue項(xiàng)目在切換頁(yè)面時(shí),IOS中瀏覽器的url并不會(huì)改變,依舊是第一次進(jìn)入頁(yè)面的地址,所以IOS獲取簽名的url需要傳第一次進(jìn)入的頁(yè)面url

Code

router/index.js

......
import { wechatAuth } from "@/common/wechatConfig.js";
......

const router = new Router({
  mode: "history",
  base: process.env.BASE_URL,
  routes: [
    {
      path: "/",
      name: "home",
      meta: {
        title: "首頁(yè)",
        showTabbar: true,
        allowShare: true
      },
    },
    {
      path: "/cart",
      name: "cart",
      meta: {
        title: "購(gòu)物車",
        showTabbar: true
      },
      component: () => import("./views/cart/index.vue")
    }
    ......
  ]
});


router.afterEach((to, from) => {
  let authUrl = `${window.location.origin}${to.fullPath}`;
  let allowShare = !!to.meta.allowShare;

  if (!!window.__wxjs_is_wkwebview) {// IOS
    if (window.entryUrl == "" || window.entryUrl == undefined) {
      window.entryUrl = authUrl; // 將后面的參數(shù)去除
    }
    wechatAuth(authUrl, "ios", allowShare);
  } else {
    // 安卓
    setTimeout(function () {
      wechatAuth(authUrl, "android", allowShare);
    }, 500);
  }
});

代碼要點(diǎn):

  1. meta中的allowShare用于判斷頁(yè)面是否可分享
  2. window.__wxjs_is_wkwebview可用來判斷是否是微信IOS瀏覽器
  3. entryUrl是項(xiàng)目第一次進(jìn)入的頁(yè)面的地址,將其緩存在window對(duì)象上
  4. 為什么安卓的時(shí)候要增加一個(gè)延時(shí)器,因?yàn)榘沧繒?huì)存在一些情況,就是即便簽名成功,但是還是會(huì)喚不起功能,這個(gè)貌似是一個(gè)比較穩(wěn)妥的解決辦法

wechatConfig.js

import http from "../api/http";
import store from "../store/store";

export const wechatAuth = async (authUrl, device, allowShare) => {
  let shareConfig = {
    title: "xx一站式服務(wù)平臺(tái)",
    desc: "xxxx",
    link: allowShare ? authUrl : window.location.origin,
    imgUrl: window.location.origin + "/share.png"
  };

  let authRes = await http.get("/pfront/wxauth/jsconfig", {
    params: {
      url: decodeURIComponent(device == "ios" ? window.entryUrl : authUrl)
    }
  });

  if (authRes && authRes.code == 101) {
    wx.config({
      //debug: true,
      appId: authRes.data.appId,
      timestamp: authRes.data.timestamp,
      nonceStr: authRes.data.nonceStr,
      signature: authRes.data.signature,
      jsApiList: ["updateAppMessageShareData", "updateTimelineShareData", "onMenuShareAppMessage", "onMenuShareTimeline"]
    });

    wx.ready(() => {
      wx.updateAppMessageShareData({
        title: shareConfig.title,
        desc: shareConfig.desc,
        link: shareConfig.link,
        imgUrl: shareConfig.imgUrl,
        success: function () {//設(shè)置成功
          //shareSuccessCallback();
        }
      });
      wx.updateTimelineShareData({
        title: shareConfig.title,
        link: shareConfig.link,
        imgUrl: shareConfig.imgUrl,
        success: function () {//設(shè)置成功
          //shareSuccessCallback();
        }
      });
      wx.onMenuShareTimeline({
        title: shareConfig.title,
        link: shareConfig.link,
        imgUrl: shareConfig.imgUrl,
        success: function () {
          shareSuccessCallback();
        }
      });
      wx.onMenuShareAppMessage({
        title: shareConfig.title,
        desc: shareConfig.desc,
        link: shareConfig.link,
        imgUrl: shareConfig.imgUrl,
        success: function () {
          shareSuccessCallback();
        }
      });
    });
  }
};

function shareSuccessCallback() {
  if (!store.state.user.uid) {
    return false;
  }
  store.state.cs.stream({
    eid: "share",
    tpc: "all",
    data: {
      uid: store.state.user.uid,
      truename: store.state.user.truename || ""
    }
  });
  http.get("/pfront/member/share_score", {
    params: {
      uid: store.state.user.uid
    }
  });
}

總結(jié)

原先計(jì)劃不能分享的頁(yè)面就使用hideMenuItems方法隱藏掉相關(guān)按鈕,在ios下試了一下,有些bug:顯示按鈕的頁(yè)面切換的影藏按鈕的頁(yè)面,分享按鈕有時(shí)依然存在,刷新就沒問題,估計(jì)又是一個(gè)深坑,沒精力在折騰了,就改為隱私頁(yè)面分享到首頁(yè),公共頁(yè)面分享原地址,如果有什么好的解決辦法,請(qǐng)聯(lián)系我!

一開始我有參考sf上的一篇博客http://m.fzitv.net/article/158685.htm,按照上面的代碼,android手機(jī)都能成功,但是IOS有一個(gè)奇怪的問題,就是分享間歇性的失效,同一個(gè)頁(yè)面,剛剛調(diào)起分享成功,再試一次就失敗(沒有圖標(biāo)、title,只能跳轉(zhuǎn)到首頁(yè)),經(jīng)過“不斷”努力的嘗試,應(yīng)該是解決了問題,說一下過程:

  1. 一開始以為是異步喚起沒成功的問題,就和android一樣給IOS調(diào)用wechatAuth方法也加了個(gè)定時(shí)器,測(cè)了一遍沒效果,放棄
  2. 起始js-sdk是通過npm安裝的,版本上帶了個(gè)test,有點(diǎn)不放心,改為直接使用script標(biāo)簽引用官方的版本
  3. 重新讀了一遍文檔,發(fā)現(xiàn)onMenuShareTimeline等方法即將廢棄,就把jsApiList改為jsApiList:['updateAppMessageShareData','updateTimelineShareData'],改后就變成了IOS可以成功,android分享失敗
  4. 百度updateAppMessageShareData安卓失敗原因,參考這個(gè)鏈接http://m.fzitv.net/article/158690.htm,把老的api也加到j(luò)sApiList中,仔細(xì)、反復(fù)試了試兩種設(shè)備都o(jì)k,好像是成功了,說"好像"是因?yàn)樾睦餂]底啊,各種“魔法”代碼!

最后,在這里希望騰訊官方能不能走點(diǎn)心,更新文檔及時(shí)點(diǎn),demo能不能提供完整點(diǎn)....

參考鏈接

http://m.fzitv.net/article/158685.htm
http://m.fzitv.net/article/158693.htm
http://m.fzitv.net/article/158690.htm
https://github.com/vuejs/vue-router/issues/481

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue3項(xiàng)目如何使用prettier格式化代碼

    vue3項(xiàng)目如何使用prettier格式化代碼

    這篇文章主要介紹了vue3項(xiàng)目如何使用prettier格式化代碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 實(shí)現(xiàn)shallowReadonly和isProxy功能示例詳解

    實(shí)現(xiàn)shallowReadonly和isProxy功能示例詳解

    這篇文章主要為大家介紹了實(shí)現(xiàn)shallowReadonly和isProxy功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • JavaScript 沙箱探索

    JavaScript 沙箱探索

    這篇文章主要介紹了JavaScript 沙箱探索,沙箱是基于 event bus 形式的通信實(shí)現(xiàn)上層的功能,文章的例子選擇接口實(shí)現(xiàn)了 web worker 與 quickjs 的 EventEmitter,,需要的朋友可以參考一下
    2021-10-10
  • Vuepress使用vue組件實(shí)現(xiàn)頁(yè)面改造

    Vuepress使用vue組件實(shí)現(xiàn)頁(yè)面改造

    這篇文章主要為大家介紹了Vuepress使用vue組件實(shí)現(xiàn)頁(yè)面改造示例過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Monorepo風(fēng)格的組件工程搭建示例詳解

    Monorepo風(fēng)格的組件工程搭建示例詳解

    這篇文章主要介紹了Monorepo風(fēng)格的組件工程搭建示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • vue3時(shí)間戳轉(zhuǎn)換(不使用過濾器)

    vue3時(shí)間戳轉(zhuǎn)換(不使用過濾器)

    這篇文章主要介紹了vue3時(shí)間戳轉(zhuǎn)換,?vue2轉(zhuǎn)換時(shí)間戳的時(shí)候一般使用過濾器的方式,到vue3之后,vue3移除了過濾器,就不能再用了,官方是推薦使用方法或者計(jì)算屬性的方式。下面我們來看看詳細(xì)介紹吧</P><P>
    2021-12-12
  • Vue2 Element Schema Form 配置式生成表單的實(shí)現(xiàn)

    Vue2 Element Schema Form 配置式生成表單的實(shí)現(xiàn)

    本文主要介紹了Vue2 Element Schema Form 配置式生成表單的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • el-form表單el-form-item驗(yàn)證規(guī)則里prop一次驗(yàn)證兩個(gè)或多個(gè)值問題

    el-form表單el-form-item驗(yàn)證規(guī)則里prop一次驗(yàn)證兩個(gè)或多個(gè)值問題

    這篇文章主要介紹了el-form表單el-form-item驗(yàn)證規(guī)則里prop一次驗(yàn)證兩個(gè)或多個(gè)值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Vue echarts繪制甘特圖的示例代碼

    Vue echarts繪制甘特圖的示例代碼

    甘特圖是一種條狀圖,直觀展示項(xiàng)目進(jìn)展隨時(shí)間的走勢(shì)及聯(lián)系,其中,項(xiàng)目時(shí)間由橫軸表示,項(xiàng)目活動(dòng)由縱軸表示,本文給大家介紹了Vue echarts繪制甘特圖的實(shí)現(xiàn)方法,并有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • vue 實(shí)現(xiàn)根據(jù)data中的屬性值來設(shè)置不同的樣式

    vue 實(shí)現(xiàn)根據(jù)data中的屬性值來設(shè)置不同的樣式

    這篇文章主要介紹了vue 實(shí)現(xiàn)根據(jù)data中的屬性值來設(shè)置不同的樣式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評(píng)論

丹阳市| 南丹县| 紫金县| 修水县| 南华县| 陕西省| 宁化县| 泸西县| 汉沽区| 同心县| 泰和县| 罗田县| 土默特右旗| 澄江县| 茶陵县| 宜宾市| 偏关县| 广元市| 神木县| 大英县| 拉孜县| 安吉县| 英山县| 平顶山市| 乐至县| 社会| 闵行区| 嵊州市| 鲜城| 彭水| 长治县| 敦化市| 阳西县| 罗源县| 静海县| 保靖县| 苏尼特右旗| 青阳县| 张家港市| 浦城县| 古浪县|