小程序模板網(wǎng)

快速小程序開發(fā)之微信小程序內(nèi)嵌 H5

發(fā)布時間:2019-01-08 09:12 所屬欄目:小程序開發(fā)教程
今日勵志語
要接受自己行動所帶來的責(zé)任而非自己成就所帶來的榮耀。
 
前言
微信小程序中可以直接運(yùn)行 web 頁面,這一新組件 web-view 的產(chǎn)生,可能直接導(dǎo)致小程序數(shù)量迎來一波高峰。本篇博文將從業(yè)務(wù)選型,微信小程序后臺配置,使用 web-view 完成登錄業(yè)務(wù)以及在實(shí)戰(zhàn)中如何調(diào)試一次性帶你感受小程序內(nèi)嵌 H5 的風(fēng)采,幫你更有底氣的使用微信小程序新組件 web-view。
 
技術(shù)選擇
H5 轉(zhuǎn)成小程序方案路線優(yōu)缺點(diǎn)對比
上表是從原有 H5 轉(zhuǎn)相似業(yè)務(wù)邏輯的微信小程序的方案路線優(yōu)缺點(diǎn)對比,基于時間的限制以及當(dāng)前主流多端編譯的可靠性考量,最終團(tuán)隊(duì)認(rèn)為通過使用小程序組件 web-view 內(nèi)嵌 H5 的方式比較適合當(dāng)前的開發(fā)需求。 web-view 的兼容性問題主要是要在基礎(chǔ)庫在1.6.4+及以上才可以用,而微信官方統(tǒng)計基礎(chǔ)庫在1.6.4+ 的覆蓋率已達(dá) 95% 以上,這個指標(biāo)也符合產(chǎn)品大人的要求,于是便愉快的選擇了 web-view 內(nèi)嵌 H5 的技術(shù)方案。
 
H5 和小程序技術(shù)對比
 
 
從上表中可以對比出 H5 相較于小程序的優(yōu)缺點(diǎn),方便各位前端大大評估需求。尤為重要的是因?yàn)樾〕绦蚍庋b的比較嚴(yán)重所以小程序開發(fā)的靈活性沒有 H5 那么高,這就要我們注意對交互設(shè)計的評估。
 
web-view 微信小程序配置系列問題
配置域名
業(yè)務(wù)域名中配置的就是小程序以及 H5 和 H5 中引用 iframe 的域名。這里要特別注意的是假如 H5 中有內(nèi)嵌的 iframe 也要配置進(jìn)去
這里需要服務(wù)端的朋友配合一下,將校驗(yàn)文件放置在將要嵌套的業(yè)務(wù)域名的根目錄。所以要注意后端是否可以支持,否則會有各種扯皮的問題
 
選擇基礎(chǔ)庫
開發(fā)的時候不要忘記配置微信小程序的基礎(chǔ)庫,注意 web-view 要在基礎(chǔ)庫1.6.4以上的版本庫才能使用
 
H5 中引入微信的 jssdk,其中包含了h5和小程序直接的通訊方法
 
 
 
web-view 與小程序的通信
官方給出了兩種通信方法(如下圖所示) 1、postMessage 通信 在 H5 中需要先用 wx.miniProgram.postMessage 接口,把需要分享的信息,推送給小程序。 在用戶點(diǎn)擊了小程序后退、組件銷毀、分享這些特殊事件之后,小程序頁面通過 bindmessage 綁定的函數(shù)讀取 post 信息。 2、設(shè)置 web-view 組件的 URL 通信 H5 跳轉(zhuǎn)小程序:
 
toWeixin() {
 wx.miniProgram.navigateTo({url: '/pages/myWelfare/myWelfare'});
}
小程序跳轉(zhuǎn) H5: 首先在 .wxml 中引入 web-view 組件
 
<view>
<web-view src="{{url}}" ></web-view>
</view>
之后在小程序的 js 文件中設(shè)置通過 URL 以問號傳參的方式傳入?yún)?shù)到 H5 中
 
if(!option.page){
      this.setData({
        url: `${this.data.url}?${test}`
      });
    } else {
      this.setData({
        url: `${this.data.url}${option.page}?${test}`
      });
    }
小程序內(nèi)嵌 H5 登錄實(shí)例
小程序登錄實(shí)現(xiàn)方案流程圖:
 
clipboard.png
 
如上圖所示:整個登錄的 cookie 的傳遞經(jīng)歷了四個步驟:
 
在小程序登錄后獲取到后端傳遞的 cookie 并保存
通過 web-view 中的 url 傳遞到 H5 中
在 H5 中得到傳遞的值并寫到 cookie 中
在訪問接口的時候帶上 cookie 2、從微信小程序響應(yīng)頭中獲得 cookie 存到 storage 中:
首先在登錄頁獲取到響應(yīng)頭中的登錄 cookie 放到 storage 中
 
wx.setStorageSync('cookie', res.header["Set-Cookie"]);
在微信小程序中每次請求接口的時候,將 storage 中的 cookie 取出來,放到請求頭中,如果傳入不正確或者沒有傳入 cookie 值,后臺將返回 errorCode 為 3002 ,此時前端跳轉(zhuǎn)到登錄頁面。
 
 var headerCookie = wx.getStorageSync('cookie');
   wx.request({
            url: murl,
            data: parameter.data || {},
            header: {
               'Cookie': headerCookie
            },
            method: parameter.method || 'POST',
            success: function(res) {
            if(res.data.code == 3002) {
                    wx.redirectTo({
                        url: '../login/login'
                    })
                } else {
                    parameter.success && parameter.success(res);
                }
 
            }
3、獲得 cookie 并拼接到 URL 中
首先在 web-view 頁面獲取 cookie ,并匹配到需要傳遞的字段,之后將此字段放到 url 中通過問號傳參的方式傳遞到 H5 中
 
try {
      var value = wx.getStorageSync('cookie');
      if (value) {
        test = value.match(new RegExp("(^| )"+"jxi-m-sid"+"=([^;]*)(;|$)"))[2] ;
      }
    }
url: 'https://www.xxx.com#',
    if(!option.page){
      this.setData({
         //在這里放入傳遞的字段(如test)
         url: `${this.data.url}?${test}`
      });
    } else {
      this.setData({
         //在這里放入傳遞的字段,也可以拼接更多的信息(如option.page)
         url: `${this.data.url}${option.page}?${test}`
      });
    }
4、獲取 cookie 并在 H5 中使用 在 H5 中獲取 cookie 值,并帶入 cookie ,注意 domain 和 path 的設(shè)置,這兩個值必須都有:
 
let isDebug = (window.location.href).indexOf('myf') > -1;
let host = isDebug ? 'jd' : 'jdf';
//獲得傳遞的字段
let c =window.location.href.split('?')[1];
//設(shè)置cookie
document.cookie = `jxi-m-sid=${c};domain=${host};path=/`;
小程序內(nèi)嵌 H5 調(diào)試解決方案
關(guān)于調(diào)試效果緩存的問題 小程序的更新機(jī)制即當(dāng)小程序進(jìn)入后臺,客戶端會維持一段時間的運(yùn)行狀態(tài),超過一定時間后(目前是 5 分鐘)會被微信主動銷毀。 小程序銷毀后再重新啟動時如果發(fā)現(xiàn)有新版本,將會異步下載新版本的代碼包,并同時用客戶端本地的包進(jìn)行啟動,即新版本的小程序需要等下一次銷毀后再重新啟動時才會應(yīng)用上。
內(nèi)嵌 H5 調(diào)試問題 因?yàn)槲⑿判〕绦蜷_發(fā)者工具中并沒有提供內(nèi)嵌 H5 的調(diào)試工具,所以我們可以采取以下方法調(diào)試
在 H5 開發(fā)的時候,我們可以在微信小程序開發(fā)者工具中找到 web-view 傳遞給 H5 的 URL 鏈接將此鏈接黏貼到瀏覽器中即可像平時開發(fā) H5 一樣調(diào)試
對于手機(jī)端 H5 的測試調(diào)試可以在 H5 中引入 vconsole 這個插件來調(diào)試程序,他可以讓我們看到接口情況以及 H5 中的日志。
 
總結(jié)
看到這里,我們分別從
 
web-view 技術(shù)的優(yōu)缺點(diǎn)
web-view 微信小程序配置系列問題
web-view 與小程序的通信
小程序內(nèi)嵌 H5 登錄實(shí)例
小程序內(nèi)嵌 H5 調(diào)試解決方案
五個方面梳理了關(guān)于微信小程序 webview 組件的使用。 當(dāng)然,微信小程序組件 web-view 還并不完善,其中很難實(shí)現(xiàn)一些特殊的交互,比如返回按鈕返回的頁面只能是上一級不能是任意自定義的頁面等問題,這就需要我們更好的溝通以及規(guī)劃交互設(shè)計,同時反饋并等待微信小程序官方的更新和支持。


易優(yōu)小程序(企業(yè)版)+靈活api+前后代碼開源 碼云倉庫:starfork
本文地址:http://22321a.com/wxmini/doc/course/25074.html 復(fù)制鏈接 如需定制請聯(lián)系易優(yōu)客服咨詢:800182392 點(diǎn)擊咨詢
QQ在線咨詢