H5 網頁跳轉微信小程序踩坑(結合 uniapp 使用實例)


問題:蘋果手機可以顯示圖片跳轉按鈕,但是安卓手機無法顯示出來。、問題:蘋果手機可以顯示圖片跳轉按鈕,但是安卓手機無法顯示出來。、

原因:
看看圖片鏈接是 // 還是 http 開頭,如果是 //test.com/upload/60/2b605429ddcc756370be777761c98d.png 這種形式的圖片鏈接,會導致安卓手機在 <script type="text/wxtag-template"> 標簽里的圖片無法顯示出來。

解決:
圖片鏈接加上前綴 http: 或者 https:,變成 https://test.com/upload/60/2b605429ddcc756370be777761c98d.png

問題:無法顯示跳轉小程序按鈕

  1. wx.config 參數是否正確,比如 appIdsignature。容易遇到問題是 signature 簽名的算法的計算。

根據官方文檔

簽名生成規則如下:參與簽名的字段包括noncestr(隨機字符串), 有效的jsapi_ticket, timestamp(時間戳), url(當前網頁的URL,不包含#及其后面部分)

生成簽名用到的 url 參數 必須是 當前網頁的 URL,不包含 # 及其后面部分。如果當前打開的 H5 頁面包含有 # 字符,請按要求進行舍棄然后計算簽名。PHP 代碼示例:

// $_REQUEST['url'] 就是頁面 JS 獲取到的 location.href
$url_raw = $_REQUEST['url'];
$url_arr = explode('#', $url_raw);
$url = reset($url_arr);
  1. 務必仔細檢查 <wx-open-launch-weapp> 里填寫的 username 或者 path 屬性是否按照官方文檔填寫正確。

結合 uniapp 使用

參考文章:https://www.i4k.xyz/article/RosaChampagne/119571606

  1. <script type="text/wxtag-template"> 標簽里使用變量 不能 使用 vue 的寫法,如:
<image :src="isVip ? ad_mini : ad" class="btnMore22" width="90%"></image>

而是要用小程序原生的寫法,使用 {{ }} 將變量包圍起來:

<image src="{{ isVip ? ad_mini : ad }}" class="btnMore22" width="90%"></image>
  1. Vue 增加忽略自定義元素
Vue.config.ignoredElements = ['wx-open-launch-weapp'];

其它要注意的問題

引用官方文檔

  • 開放對象:已認證的服務號,服務號綁定“JS接口安全域名”下的網頁可使用此標簽跳轉任意合法合規的小程序。
  • 頁面中與布局和定位相關的樣式,如position: fixed; top -100;等,盡量不要寫在插槽模版的節點中,請聲明在標簽或其父節點上
  • 對於有CSP要求的頁面,需要添加白名單frame-src https://*.qq.com webcompt:,才能在頁面中正常使用開放標簽。

來自第三方參考鏈接:https://developers.weixin.qq.com/community/develop/article/doc/000c00b4490678f528baf2cf756413
https://www.shuzhiduo.com/A/A7zgQvkP54/
https://juejin.cn/post/6844904193635909645

  • 如果你跳轉之后顯示頁面不存在,請檢查下 path 的路徑結尾是否寫上了 .html
  • wx.config 在初始化授權寫上開放標簽 openTagList: ['wx-open-launch-weapp']
  • wx.configjsApiList 里的屬性不能為空,否則會提示 config:param is empty
wx.config({
  // ...
  jsApiList: ['onMenuShareAppMessage'], // 因為不能為空,所以我隨便寫了一個微信的方法
  openTagList: ['wx-open-launch-weapp'],
});
  • 如果要測試 wx.config 參數是否配置成功,將 debug: true 屬性加上,如果用微信開發者工具或者微信客戶端訪問網頁彈出對話框提示 {errMsg: "config:ok”},說明已經接入成功;
  • 如果你覺得里面寫樣式不好寫,可以在里面樣式style寫opacity:0;,這樣的話開放標簽只是用來填充,大小自己控制就行;
  • 經過測試發現標簽內定義的樣式真的很尷尬,且不受控制,所以我們直接將標簽用 CSS 絕對定位並設透明度為 opacity: 0, 蓋在了我們原本的設計圖上;
  • 透明度為 opacity: 0 的標簽 <script type="text/wxtag-template"> 不能為空,否則寬高會被解析為 0,也就是按鈕根本點擊不到;
  • 在 VUE 的 mounted 生命周期回調函數內偵聽開放標簽的回調事件:
mounted(){
    var btn = document.getElementById(this.id)
    btn.addEventListener('launch', e => {
        // 在此處可設置粘貼板內數據,數據是傳遞給 app 的參數進,
        console.log('success');
    });
    btn.addEventListener('error', e => {
        // 在此處可設置粘貼板內數據,數據是傳遞給 app 的參數進,
        console.log('fail', e.detail);
        // 喚醒失敗的情況下,可用於降級處理比如在此處跳轉到應用寶
    });
}
  • 如果微信版本低於7.0.12 開放標簽是無法使用的,所以最好在開放標簽外套一層 DIV 用於點擊事件,在事件中斷段微信版本號如果低於,則降級到應用寶之類的方案(參考例子:https://www.shuzhiduo.com/A/A7zgQvkP54/)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM