W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在智能小程序中,導(dǎo)航跳轉(zhuǎn)是連接兩個頁面的紐帶,由于框架導(dǎo)航實現(xiàn)底層原理的黑盒效應(yīng),以及頁面容器的場景和類型不同,導(dǎo)致我們在開發(fā)小程序過程中,不能清晰的判斷頁面的一些表現(xiàn),例如返回圖標(biāo)(客戶端繪制的一個左箭頭圖標(biāo),位于頂部導(dǎo)航欄的最左側(cè),用于返回上一個小程序頁面容器)與首頁圖標(biāo)(客戶端繪制的一個小房子圖標(biāo),用于打開小程序 app.json 配置的首頁)使用場景不明確。
通過對小程序框架進行分析,我們整理了全面的導(dǎo)航原理以及頁面跳轉(zhuǎn)后客戶端的表現(xiàn),希望為您的開發(fā)帶來幫助。
智能小程序提供了 5 種路由方式,即: navigateTo、redirectTo、navigateBack、switchTab、reLaunch,除直接調(diào)用 API 的方式,還可以通過 navigator 組件 綁定屬性的方式觸發(fā)路由跳轉(zhuǎn)。假設(shè)從 A 頁面跳轉(zhuǎn)到 B 頁面,針對 5 種不同的跳轉(zhuǎn),通過對智能小程序分析,客戶端和小程序框架配合如下:
跳轉(zhuǎn)方式 | 實現(xiàn)方式 | 場景 |
---|---|---|
navigateTo | 小程序框架攜帶開發(fā)者參數(shù),通知客戶端打開一個新的頁面容器,客戶端打開后將相關(guān)參數(shù)回傳給小程序框架,并通知框架開始加載開發(fā)者代碼,緊接著框架實例化一個新的頁面并將其推入頁面棧中,然后利用初始數(shù)據(jù)進行初始化頁面渲染。 | 只能打開非 tabBar 頁面 |
redirectTo | 小程序框架攜帶開發(fā)者參數(shù),通知客戶端打開一個新的頁面容器,客戶端打開后將相關(guān)參數(shù)回傳給小程序框架,并通知框架開始加載開發(fā)者代碼,緊接著框架將頁面棧頂?shù)男畔⒏聻榇D(zhuǎn)頁面的信息,同時創(chuàng)建頁面實例,然后利用初始數(shù)據(jù)進行初始化頁面渲染。 | 只能打開非 tabBar 頁面 |
navigateBack | 有兩種方式返回上一個頁面,一種是主動操作(android 物理返回、雙端右滑、通過頂 bar 的返回按鈕),此場景下返回時客戶端會通知小程序框架將頁面棧頂頁彈出;另一種是調(diào)用 API 的方式或者利用 navigator 組件返回上一頁,此場景下是由框架直接通知客戶端關(guān)閉當(dāng)前頁面容器,客戶端關(guān)閉成功后通知小程序框架將頁面棧頂頁彈出。 | 可作用于任意頁面 |
switchTab | 有兩種方式進行 tab 切換,一種是主動操作(在 tab 頁點擊另一個 tab),客戶端會通知小程序框架對頁面棧信息進行更新,另一種是通過 API 或利用 navigator 組件通知客戶端跳轉(zhuǎn)到某一 tab 頁,客戶端跳轉(zhuǎn)完成時通知小程序框架進行頁面棧信息更新。 | 只能打開 tabBar 頁面 |
reLaunch | 小程序框架將頁面棧清空,然后利用開發(fā)者傳入的 url 重新初始化為第一個頁面。 | 可打開任意頁面 |
假設(shè)我們的所有頁面都在原生小程序頁面跳轉(zhuǎn):
智能小程序官方并不推薦使用 web-view 組件承載 h5 頁面。因為這和原生小程序頁面相比性能有極大的劣勢,并不能給我們的用戶帶來更好的體驗。但是,在初期階段確實存在將 h5 頁面先遷移到小程序中的訴求。
在 web-view 組件承載 h5 頁面中,如果想要跳轉(zhuǎn)到一個新的小程序頁面(即客戶端新開一個容器),需要配合 jssdk 進行操作。
當(dāng)需要從 h5 無縫轉(zhuǎn)接到小程序,首先想到的就是小程序內(nèi)放置一個web-view組件來鏈接之前的 h5 頁面,一行代碼就完成了遷移到小程序的難題。實際情況如下圖:
小程序,頁面左上角沒有返回按鈕,只能不停的往下點,無法返回。
問題原因:
使用 web-view 組件的 h5 中跳轉(zhuǎn)到 h5 的下一個頁面,客戶端并沒有打開一個新的小程序頁面,而是在當(dāng)前 web-view 組件加載了新的網(wǎng)頁,這樣導(dǎo)致客戶端的頁面棧沒有增加新的小程序頁面,導(dǎo)航欄的返回按鈕沒有出現(xiàn),導(dǎo)航欄上還是原來的按鈕。
正常情況下,小程序直接打開一個非首頁小程序頁面,會出現(xiàn)首頁圖標(biāo),如未點擊首頁或者右上角“更多”里面的回首頁或者首頁圖標(biāo),在跳轉(zhuǎn)到新的小程序頁面的時候,首頁圖標(biāo)將會一直存在。
通過跳轉(zhuǎn)新的小程序頁面,比如在將要加載的 h5 也放個 web-view 組件,觸發(fā)新的小程序頁面加載,下一個頁面的左上角是會有返回按鈕,體驗上和原生一致。效果圖:
那么問題來了,怎么把點擊的鏈接傳到第二個頁面呢?我們可以在 web-view 組件 頁面使用 jssdk 中 h5 頁面跳轉(zhuǎn)到小程序頁面的方法 小程序.webView.navigateTo,然后再攜帶一個 url 參數(shù):
代碼示例
navigate(url) {
swan.webView.navigateTo({url: '../webview/webview?weburl=' + url});
}
接著在小程序另外一個新的 web-view 組件頁面中:代碼示例
Page({
data: {
url:''
},
// 監(jiān)聽頁面加載,獲取H5頁面?zhèn)鬟f過來的weburl
onLoad: function (options) {
this.setData({
url: options.weburl
});
}
});
并賦值給 webview.小程序 中的 src 屬性:
// pages/webview/webview.swan
<web-view src="{{url}}"></web-view>
點擊返回按鈕:
當(dāng)我們從一個小程序打開另一個小程序,單個小程序間頁面跳轉(zhuǎn)參見原生小程序頁面、web-view 組件撐起的 h5 頁面,目前百度 APP 客戶端最多支持打開 6 個小程序,超出之后會按打開順序依次替換掉最先打開的小程序,當(dāng)用戶主動進行小程序切換(點擊右上角的關(guān)閉按鈕,將當(dāng)前小程序送入后臺,或者在 android 多任務(wù)管理中直接切換到某一個小程序頁面)時,會觸發(fā)每個小程序的部分生命周期,并不會刷新導(dǎo)航欄。因此可以在跳轉(zhuǎn)到某個小程序后,繼續(xù)使用之前的導(dǎo)航跳轉(zhuǎn)方法。小程序間的導(dǎo)航流程圖:Tips:
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: