需求前提:要求復用H5代碼嵌入小程序
方案:使用web-view做跳轉
遇到的問題:
1.跳轉的H5頁面沒有返回按鈕
解決方案:由于小程序內部的頁面跳轉是會生成返回按鈕的请琳,有這個原理就可以,首先讓小程序由首頁跳轉的到一個空白頁,
然后在這個空白頁做一個web-view的跳轉,這樣就會有返回按鈕了翩概,但是這樣會產(chǎn)生一個問題藻糖。
假如,我們的小程序沒有首頁晒哄,二十一進入小程序就需要跳轉到H5頁面,那么用這個方法之后就會產(chǎn)生一個問題肪获,當我在H5第一個頁面按返回的時候頁面出現(xiàn)空白問題寝凌,那么如何解決呢?
如下:
小程序首頁加上以下代碼:
onShow() {
//如果已經(jīng)顯示過web-view頁了孝赫,則執(zhí)行后退操作较木,否則就跳到web-view頁
if (!app.data.webShowed) {
wx.navigateTo({
url: '../webview/index'
})
} else {
wx.navigateBack({
delta: 1
});
}
}
跳轉的web-view頁面加上:
onShow: function () {
wx.showShareMenu({
withShareTicket: true
})
app.data.webShowed = true;
},
這樣就可以了
然后問題又來了,如果我的H5頁面需要分享青柄,而且有級H5頁面伐债,該怎么做呢
其實我們可以想一個思路预侯,我們分享出去的只能是小程序頁面,所以我們要把一個固定的小程序頁面分享出去峰锁,然后用參數(shù)的形式吧H5的地址帶過去萎馅,當用戶點開分享的時候是跳轉到我們那個固定的小程序頁面的,那么怎么讓他跳到H5頁面呢虹蒋?
很簡單:我們把參數(shù)H5的URL通過分享帶到了小程序的地址上糜芳,我們只需要在那個固定分享的小程序頁面獲取地址,然后重新用web-view跳轉就能實現(xiàn)分享功能了
以下是代碼實現(xiàn):
webview頁面分享方法:
onShareAppMessage: function (options) {
return {
title: '分享標題',
path: `/pages/logs/logs?url=${encodeURIComponent(options.webViewUrl)}` // 分享出去后打開的頁面地址
}
}
這里有兩點需要注意魄衅,
1.地址怎么拿到的峭竣?其實觸發(fā)分享事件的時候會返回一個對象,其中就包含了當前頁面地址
2.我們把url地址進行encodeURIComponent編碼之后晃虫,特殊字符被替換掉了皆撩,所以整體就會作為參數(shù)url的值,在頁面對接收到的參數(shù)進行decodeURIComponent解碼哲银,就可以得到正確的結果扛吞。所以我們使用encodeURIComponent進行編碼,然后在固定頁面獲取后解碼
固定分享頁代碼:
onLoad(option) {
this.setData({
url:decodeURIComponent(option.url) //通過option接收url
})
}
接收到URL之后盘榨,給web-view的src賦值
到這里我們的分享頁就實現(xiàn)了喻粹。
新人碼農,歡迎大家糾正錯誤草巡,謝謝