記一次微信小程序與webviewH5通信的踩坑記錄
背景
近期公司需要將H5網(wǎng)頁嵌入到微信小程序內(nèi),這個僅需要引入webview即可:
<web-view :src="webViewUrl"></web-view>
但對于部分同學(xué)可能需要進一步的開發(fā),例如二者之間數(shù)據(jù)傳輸,接下來為大家奉上自己的踩坑記錄。
實踐
1、H5傳遞與微信小程序
首先在H5環(huán)境,我們想要與微信小程序通信,必須引入相關(guān)SDK,例如,我的微信小程序是由uniapp框架開發(fā)的,所以通信之前,我們需要將uniapp的SDK引入到我們的H5項目當(dāng)中。下載地址

引用下載文件
import uni from "@/public/uni.webview.1.5.4.js"; //如果提示uni.postMessage 不是function,就在 uni.webview.1.5.4.js 里面將 uni 替換掉,如替換成 webUni(建議 查找 全選 替換) import webUni from "@/public/uni.webview.1.5.4.js";
隨后我們便可以先檢查當(dāng)前環(huán)境
webUni.getEnv(function(res) {
console.log('當(dāng)前環(huán)境:' + JSON.stringify(res));
});向小程序傳遞參數(shù)(window.postMessage)

根據(jù)官方文檔說明,我們采用window.postMessage()
const obj= {params: "傳遞參數(shù)"}
window.postMessage({
data: obj
});
這時需要我們在webview標簽加上@message屬性,監(jiān)聽接收參數(shù)
<template>
<view class="">
<web-view :src="webViewUrl" @message="handleMessage"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
webViewUrl: 'http://localhost:80',
}
},
methods: {
handleMessage(event){
console.log(event.detail.data);
//打印結(jié)果
//data:{params: "參數(shù)示例"}
},
},
}
</script>這里要注意官方說明?。?!

所以,在H5傳遞參數(shù)的方法中,要一并觸發(fā)相關(guān)api
const obj= {params: "傳遞參數(shù)"}
window.postMessage({
data: obj
});
//后退
webUni.navigateBack({
delta: 1
});
//組件銷毀(也就是關(guān)閉頁面)
uni.redirectTo({
url: 'test?id=1'
});
uni.reLaunch({
url: 'test?id=1'
});
uni.switchTab({
url: '/pages/index/index'
});
//分享
uni.share()
//根據(jù)自身情況選其一但在實際應(yīng)用中,我們可能不會采用這種方法,因為想要觸發(fā)@message事件,總是要在特定時機才可以,所以我們也可以選擇更為直接的方法:路徑傳參
//在H5界面編寫
//首先聲明參數(shù)變量
const params = {data: "Are you ok?"}
//假如我們要跳轉(zhuǎn)到小程序的login頁面,我們可以這樣做
webUni.navigateTo({
url: `/pages/login/login?message=${params}`,
});
//在小程序編寫
//login頁面就可以在頁面加載時接收路徑參數(shù)
onLoad(){
const routes = getCurrentPages()
const curParam = routes[routes.length - 1]
const jsonString = decodeURIComponent(curParam.options.message);
const data = JSON.parse(jsonString);
console.log(data);
//打印結(jié)果
//params:{data: "Are you ok?"}
},這樣小程序便可以接收到H5傳遞的參數(shù)了。
2、微信小程序與H5通信
微信小程序傳遞參數(shù)給H5就相對簡單了,例如我們的H5鏈接是localhost,我們就可以:
<template>
<view class="">
<web-view :src="webViewUrl" @message="handleMessage"></web-view>
</view>
</template>
<script>
export default {
data() {
return {
webViewUrl: 'http://localhot:3000',
}
},
onShow(options) {
//聲明要傳遞給H5的參數(shù)
let params = {
data: "這是要給H5的參數(shù)"
}
this.webViewUrl = `http://localhot:3000?${JSON.stringify(params)}`
},
methods: {
handleMessage(event){
console.log(event.detail.data);
}
},
}
</script>下面我們便可以在H5環(huán)境監(jiān)聽url的路徑參數(shù)
// 獲取地址欄的查詢字符串(不包括URL的域名和路徑)
const queryString = new URLSearchParams(window.location.search).toString();
// 如果查詢字符串不為空,則嘗試解析它
if (queryString) {
//首先,使用decodeURIComponent來解碼這個字符串
const decodedString: string = decodeURIComponent(queryString);
// 注意,這里末尾有一個'='號,需要移除它
const jsonString = decodedString.slice(0, -1);
// 現(xiàn)在,使用JSON.parse來解析JSON字符串
const jsonObject = JSON.parse(jsonString);
console.log("已接收到小程序的參數(shù)",jsonObject);
}至此,小程序與H5便實現(xiàn)了,相互通信。
總結(jié)
微信小程序與H5通信是在日常開發(fā)中總會遇到的場景,我第一次接觸的時候,由于沒有經(jīng)驗,走了不少彎路,所以在這里分享一下自己的經(jīng)驗,希望能幫助到正在學(xué)習(xí)的同學(xué)
到此這篇關(guān)于微信小程序與webviewH5通信踩坑的文章就介紹到這了,更多相關(guān)微信小程序與webviewH5通信內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue中使用Element UI的Table組件實現(xiàn)嵌套表格功能
這篇文章主要介紹了Vue中使用Element UI的Table組件實現(xiàn)嵌套表格功能,演示如何在Vue中使用Element UI的Table組件實現(xiàn)嵌套表格,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
詳解vue+axios給開發(fā)環(huán)境和生產(chǎn)環(huán)境配置不同的接口地址
這篇文章主要介紹了詳解vue+axios給開發(fā)環(huán)境和生產(chǎn)環(huán)境配置不同的接口地址,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
Vue3使用Univer Docs創(chuàng)建在線編輯Excel的示例代碼
本文介紹了如何在Vue3項目中集成UniverDocs,一個基于Luckysheet的企業(yè)文檔與數(shù)據(jù)協(xié)同解決方案,指導(dǎo)了從安裝到在頁面中使用的步驟,以及注意事項,如數(shù)據(jù)格式轉(zhuǎn)換和二次開發(fā)的靈活性,需要的朋友可以參考下2025-04-04

