亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Vue項目history模式下微信分享爬坑總結

2019-11-19 11:55:13
字體:
來源:轉載
供稿:網友

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

技術要點

Vue,history

常見問題及說明

debug模式下報false

這個沒得說,就是調用wx.config方法的參數錯誤造成的,請確認以下事項:

  1. 是否成功綁定了域名(域名校驗文件要能被訪問到)
  2. 使用最新的js-sdk文件,因為微信會改部分api
  3. config方法的參數是否傳正確了(拼寫錯誤、大小寫...)
  4. 需要使用的方法是否寫在了jsApiList中
  5. 獲取簽名的url需要decodeURIComponent
  6. 后臺的生成簽名的加密方法需要對照官方文檔

debug返回ok,分享不成功

  1. 確保代碼拼寫正確
  2. 分享鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致
  3. 接口調用需要放在wx.ready方法中

單頁項目(SPA)中的一些要點

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

上面那段話摘自官方文檔

開發者需要注意的事項:

  1. android和ios需要分開處理
  2. 需要在頁面url變化的時候重新調用wx.config方法,android獲取簽名的url就傳window.location.href
  3. Vue項目在切換頁面時,IOS中瀏覽器的url并不會改變,依舊是第一次進入頁面的地址,所以IOS獲取簽名的url需要傳第一次進入的頁面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: "首頁",        showTabbar: true,        allowShare: true      },    },    {      path: "/cart",      name: "cart",      meta: {        title: "購物車",        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; // 將后面的參數去除    }    wechatAuth(authUrl, "ios", allowShare);  } else {    // 安卓    setTimeout(function () {      wechatAuth(authUrl, "android", allowShare);    }, 500);  }});

代碼要點:

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

wechatConfig.js

import http from "../api/http";import store from "../store/store";export const wechatAuth = async (authUrl, device, allowShare) => {  let shareConfig = {    title: "xx一站式服務平臺",    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 () {//設置成功          //shareSuccessCallback();        }      });      wx.updateTimelineShareData({        title: shareConfig.title,        link: shareConfig.link,        imgUrl: shareConfig.imgUrl,        success: function () {//設置成功          //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    }  });}

總結

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

一開始我有參考sf上的一篇博客http://www.49028c.com/article/158685.htm,按照上面的代碼,android手機都能成功,但是IOS有一個奇怪的問題,就是分享間歇性的失效,同一個頁面,剛剛調起分享成功,再試一次就失?。]有圖標、title,只能跳轉到首頁),經過“不斷”努力的嘗試,應該是解決了問題,說一下過程:

  1. 一開始以為是異步喚起沒成功的問題,就和android一樣給IOS調用wechatAuth方法也加了個定時器,測了一遍沒效果,放棄
  2. 起始js-sdk是通過npm安裝的,版本上帶了個test,有點不放心,改為直接使用script標簽引用官方的版本
  3. 重新讀了一遍文檔,發現onMenuShareTimeline等方法即將廢棄,就把jsApiList改為jsApiList:['updateAppMessageShareData','updateTimelineShareData'],改后就變成了IOS可以成功,android分享失敗
  4. 百度updateAppMessageShareData安卓失敗原因,參考這個鏈接http://www.49028c.com/article/158690.htm,把老的api也加到jsApiList中,仔細、反復試了試兩種設備都ok,好像是成功了,說"好像"是因為心里沒底啊,各種“魔法”代碼!

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

參考鏈接

http://www.49028c.com/article/158685.htm
http://www.49028c.com/article/158693.htm
http://www.49028c.com/article/158690.htm
https://github.com/vuejs/vue-router/issues/481

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产精品三级精品av网址| 成人有码视频在线播放| 亚洲一区亚洲二区亚洲三区| 亚洲最大的网站| 在线观看精品自拍私拍| 国产亚洲人成a一在线v站| 国产成人久久精品| 亚洲一区二区中文| 国产一区二区精品丝袜| 国产成人极品视频| 九九热这里只有精品免费看| 日韩欧美一区二区三区久久| 日韩电视剧免费观看网站| 国产一区二区三区中文| 久久精品亚洲一区| 日韩欧美国产网站| 欧美二区在线播放| 国产一区二区久久精品| 国产欧美精品久久久| 欧美在线视频一区二区| 国产美女91呻吟求| 91久久国产综合久久91精品网站| 日韩在线视频免费观看高清中文| 久久99久久99精品免观看粉嫩| 国产亚洲激情视频在线| 精品视频www| 久久成人18免费网站| 成人黄色午夜影院| 国产精品一区二区久久久久| 国产精品久久av| 亚洲视频欧美视频| 成人网页在线免费观看| 成人97在线观看视频| 欧美性猛交99久久久久99按摩| 91啪国产在线| 欧美在线视频在线播放完整版免费观看| 日韩免费观看视频| 国产xxx69麻豆国语对白| 成人黄色免费在线观看| 久久久久久久久国产| 国产精品自拍视频| 欧美在线视频导航| 亚洲影院色在线观看免费| 中文综合在线观看| 国产精品直播网红| 日韩亚洲综合在线| …久久精品99久久香蕉国产| 国产成人一区二区三区| 日韩在线欧美在线| 国产欧美一区二区白浆黑人| 国产欧美日韩免费看aⅴ视频| 亚洲桃花岛网站| 午夜精品美女自拍福到在线| 欧美乱大交xxxxx另类电影| 亚洲精品www| 亚洲成人精品在线| 欧美性猛交xxxx乱大交3| 最新亚洲国产精品| 精品国产视频在线| 成人激情免费在线| 亚洲精品一区在线观看香蕉| 欧美激情综合色综合啪啪五月| 成人在线观看视频网站| 欧美香蕉大胸在线视频观看| 精品国产欧美一区二区五十路| 欧美黄网免费在线观看| 性金发美女69hd大尺寸| 午夜精品一区二区三区在线播放| 日韩免费黄色av| 91精品久久久久久久久久久久久| 2019最新中文字幕| 久久99久久99精品免观看粉嫩| 一区二区三区美女xx视频| 国产精品96久久久久久| 亚洲成人av片| 国产精品欧美激情在线播放| 亚洲国产成人91精品| 日本免费久久高清视频| 国产99视频在线观看| 国产美女直播视频一区| 亚洲第一精品电影| 亚洲精品资源在线| 久久久女人电视剧免费播放下载| 欧美成人黄色小视频| 亚洲欧美国产一区二区三区| 日韩精品免费在线播放| 欧美在线性视频| 国产精品入口免费视频一| 成人亚洲欧美一区二区三区| 久久免费视频网| 9.1国产丝袜在线观看| 国产一区二区黑人欧美xxxx| 久久99久久99精品免观看粉嫩| 美女啪啪无遮挡免费久久网站| 午夜精品久久久久久久99热浪潮| 一区二区三区精品99久久| 一个色综合导航| 亚洲国产毛片完整版| 亚洲国产欧美一区二区三区同亚洲| 日本91av在线播放| 亚洲精品免费网站| 欧美日韩亚洲激情| 欧美专区福利在线| 一区二区av在线| 日韩三级成人av网| 96sao精品视频在线观看| 萌白酱国产一区二区| 日韩最新在线视频| 亚洲国产精品专区久久| 久久噜噜噜精品国产亚洲综合| 欧美一级成年大片在线观看| 97成人在线视频| 秋霞午夜一区二区| 色一情一乱一区二区| 91av视频在线观看| 亚洲福利视频网站| 韩国精品美女www爽爽爽视频| 欧美日韩国产丝袜另类| 成人免费看片视频| 日韩av在线看| 亚洲自拍偷拍福利| 亚洲欧美日韩国产精品| 一个人看的www久久| 一区二区三区回区在观看免费视频| 欧美成人四级hd版| 亚洲午夜精品久久久久久性色| www.久久久久久.com| 精品性高朝久久久久久久| 亚洲肉体裸体xxxx137| 亚洲福利视频在线| 最新日韩中文字幕| 91精品国产91久久| 亚洲精品一区二区网址| 国产精品第七影院| 亚洲xxxx3d| 欧美日韩国产页| 久久精品99久久香蕉国产色戒| 亚洲国产精品热久久| 性色av香蕉一区二区| 久久视频免费观看| www.欧美精品一二三区| 日韩免费av一区二区| 久久久久久尹人网香蕉| 日本不卡高字幕在线2019| 91精品国产九九九久久久亚洲| 久久久久久噜噜噜久久久精品| 欧美日韩国产一区在线| 免费91麻豆精品国产自产在线观看| 亚洲精品一区二三区不卡| 欧美日韩国产色| 国产suv精品一区二区| 5566成人精品视频免费| 国产精品美女久久久久av超清| 国产精品大陆在线观看| 中文字幕精品一区二区精品| 国产成人精品电影| 亚洲视频在线观看免费| 免费97视频在线精品国自产拍| 日本一区二区在线播放| 国产97人人超碰caoprom| 国内精品中文字幕| 8050国产精品久久久久久| 欧美性xxxx极品hd欧美风情| 亚洲国产精品99久久|