小程序webView實(shí)現(xiàn)小程序內(nèi)嵌H5頁面的全過程

本案例新建了一個(gè) webView頁面 只渲染webView組件

配置路由,跳轉(zhuǎn)頁面的時(shí)候 前綴使用‘/subPages/webView/index?weburl=https://xxxxx’

componentDidMount 的時(shí)候 獲取路由中的 weburl 地址參數(shù)
async componentDidMount() {
const router = getCurrentInstance().router;
const params = router.params;
let url = params.weburl;
// 對(duì)url進(jìn)行參數(shù)處理 ,可以增加需要傳遞給H5的token等其他參數(shù)
this.setState({
url: url, // 獲取其他小程序頁面 請(qǐng)求跳轉(zhuǎn)的地址
});
}
render() {
const { url } = this.state;
return (
<WebView
src={decodeURIComponent(url)} // H5地址 加上域名的全鏈路地址
onMessage={(res) => {
this.setPostMessage(res.detail.data); // 存儲(chǔ)H5傳回來的數(shù)據(jù) 可以存到公共區(qū)域 方便使用
}}
/>
);
}
發(fā)起跳轉(zhuǎn)的方式:
const token=''; // 自行獲取token
const weburl='' ;// 自行定義地址
Taro.navigateTo({
url: `/subPages/webView/index?weburl=${weburl}&token=${token}` ,
});
上面是跳轉(zhuǎn)到小程序的webview.jsx頁面 并且帶上了需要跳轉(zhuǎn)的H5地址weburl
在webview頁面加載的時(shí)候獲取H5地址 并添加在web-view標(biāo)簽上
如果頁面中很多地方需要跳轉(zhuǎn)H5頁面 并且H5頁面是基本固定的域名 可以將Taro.navigateTo進(jìn)行封裝處理
案例:
const toWebFun = (type = 'navigateTo') => {
return function (url, isRequireToken) {
const params = queryToObj(url); //
const token = Taro.getStorageSync(ConstantList.TOKEN); //
const host = Config.HOST_H5; // H5固定域名
const TaroNavigate = type === 'redirectTo' ? Taro.redirectTo : Taro.navigateTo;
let path = '';
let tokenKey = '?token=';
let ismini = '?ismini=1'; // 個(gè)人定義代表小程序內(nèi)打開H5 方便區(qū)分
// 帶有https鏈接情況 就不使用host固定域名
if (url.includes('https://')) {
path = `/subPages/webView/index?weburl=${encodeURIComponent(
`${url}${url.indexOf('?') > -1 ? '&token=' : '?token='}${token}&ismini=1`,
)}`;
TaroNavigate({
url: path,
});
return;
}
// 如果連接本身帶有?后面參數(shù) 則不要覆蓋 而是追加
if (url.indexOf('?') !== -1) {
tokenKey = '&token=';
ismini = '&ismini=1';
}
if (isRequireToken) { // 是否需要登錄的頁面
if (token) {
path = `/subPages/webView/index?weburl=${encodeURIComponent(`${host}#${url + tokenKey + token}${ismini}`)} `;
} else {
// 需要登錄 有沒有token的情況 先跳轉(zhuǎn)登錄 然后 帶上url登陸后繼續(xù)執(zhí)行跳轉(zhuǎn)操作 又會(huì)繼續(xù)執(zhí)行toWebFun 函數(shù)
Taro.navigateTo({
url: `/subPages/login/index?redirectTo=${url}`,
});
return;
}
} else {
// 無需token
path = `/subPages/webView/index?weburl=${encodeURIComponent(`${host}#${url}${ismini}`)}`;
}
TaroNavigate({
url: path,
});
};
};
export const navigateToWeb = toWebFun();
在其他頁面就是使用navigateToWeb 跳轉(zhuǎn)H5頁面
H5頁面中提供一下方法回到小程序頁面及給小程序頁面?zhèn)髦?/p>

小程序和網(wǎng)頁之間的通信是單向的,即只能從網(wǎng)頁發(fā)送消息到小程序,不能從小程序發(fā)送消息到網(wǎng)頁。
// H5與小程序交互的方式
// 返回小程序首頁
wx.miniProgram.navigateTo({url: '/pages/home/index'})
// 給小程序傳遞參數(shù)
wx.miniProgram.postMessage({ data: 'foo' })
// 給小程序傳遞復(fù)雜參數(shù)
wx.miniProgram.postMessage({ data: {foo: 'bar'} })
// 小程序web-view 存儲(chǔ)H5傳回來的數(shù)據(jù)
// onMessage={(res) => {
// this.setPostMessage(res.detail.data); // 存儲(chǔ)H5傳回來的數(shù)據(jù)
// }}
// 獲取當(dāng)前環(huán)境
wx.miniProgram.getEnv(function(res) { console.log(res.miniprogram) })
// 小程序下的H5 去小程序的虛擬訂單頁
wx.miniProgram.navigateTo({url:`/subPages/virtualOrderList/virtualOrderList?type=coupon`});小程序可以在跳轉(zhuǎn)之前在url攜帶一些參數(shù),或者直接通過后端緩存的方式 在小程序存儲(chǔ)緩存換取緩存id,拼接在url上,跳轉(zhuǎn)到H5之后通過緩存id獲取緩存數(shù)據(jù)
總結(jié)
到此這篇關(guān)于小程序webView實(shí)現(xiàn)小程序內(nèi)嵌H5頁面的文章就介紹到這了,更多相關(guān)小程序webView內(nèi)嵌H5頁面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript中刪除指定數(shù)組中指定的元素的代碼
已知一個(gè)數(shù)組,我們想用指定的方法對(duì)數(shù)組中的元素進(jìn)行逐一操作。需要的朋友可以參考下。2011-02-02
基于Cesium實(shí)現(xiàn)繪制圓形,正方形,多邊形,橢圓圖形標(biāo)注
這篇文章主要介紹了如何利用Cesium實(shí)現(xiàn)繪制圓形、正方形、多邊形、橢圓等形狀的圖形標(biāo)注,文中的示例代碼講解詳細(xì),需要的可以參考一下2022-06-06
微信小程序ajax實(shí)現(xiàn)請(qǐng)求服務(wù)器數(shù)據(jù)及模版遍歷數(shù)據(jù)功能示例
這篇文章主要介紹了微信小程序ajax實(shí)現(xiàn)請(qǐng)求服務(wù)器數(shù)據(jù)及模版遍歷數(shù)據(jù)功能,結(jié)合實(shí)例形式分析了微信小程序ajax調(diào)用及模板wx:for循環(huán)列表渲染相關(guān)操作技巧,需要的朋友可以參考下2017-12-12
bootstrap fileinput實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了bootstrap fileinput實(shí)現(xiàn)文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
JavaScript動(dòng)態(tài)提示輸入框輸入字?jǐn)?shù)的方法
這篇文章主要介紹了JavaScript動(dòng)態(tài)提示輸入框輸入字?jǐn)?shù)的方法,實(shí)例分析了javascript針對(duì)頁面元素的動(dòng)態(tài)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
手機(jī)端圖片縮放旋轉(zhuǎn)全屏查看PhotoSwipe.js插件實(shí)現(xiàn)
這篇文章主要介紹了手機(jī)端圖片縮放旋轉(zhuǎn)全屏查看PhotoSwipe.js插件實(shí)現(xiàn),感興趣的小伙伴們可以參考一下2016-08-08

