web-view內(nèi)嵌H5與uniapp數(shù)據(jù)的實(shí)時(shí)傳遞解決方案
場景:
在 uni-app 中通過 web-view 內(nèi)嵌 H5 ,要做到在 H5 發(fā)起傳遞信息傳給 uni-app 并且 uni-app 能實(shí)時(shí)接收。
解決方案:
1.在uni-app項(xiàng)目的main.js文件中引入和創(chuàng)建一個(gè)事件總線對象:
import Vue from 'vue' export const EventBus = new Vue()
2.在uni-app中定義一個(gè)事件監(jiān)聽函數(shù),在該函數(shù)中實(shí)現(xiàn)對來自web-view的消息進(jìn)行處理:
import {EventBus} from '@/main.js' // 監(jiān)聽事件 EventBus.$on('messageFromH5', (data) => { // 處理來自web-view的消息 console.log('收到來自H5頁面的消息:', data) })
3.在web-view的H5頁面中使用postMessage()方法向uni-app頁面發(fā)送消息,同時(shí)將發(fā)送的消息格式轉(zhuǎn)換為對象格式:
var messageData = { content: '這是從H5頁面中發(fā)送的消息' } var sendData = JSON.stringify(messageData) window.parent.postMessage(sendData, '*')
- 在調(diào)用postMessage方法時(shí),第二個(gè)參數(shù)需要指定為’*',表示任意域名都可以接收到消息。
- uniapp的web-view組件的onMessage中的回調(diào)函數(shù),只有在頁面還沒有被銷毀前才會(huì)響應(yīng),因此需要在頁面銷毀前即可獲得消息,如果需要在后退和分享時(shí)也能獲得消息,則需要在生命周期函數(shù)onUnload中清理原有的web-view,再重新生成web-view,并在重新生成的web-view中監(jiān)聽消息。
- 在web-view中使用postMessage方法發(fā)送數(shù)據(jù)時(shí),需要確保發(fā)送的數(shù)據(jù)是一個(gè)標(biāo)準(zhǔn)的JSON對象,避免其他數(shù)據(jù)格式的問題而導(dǎo)致消息無法被正確接收。
4.在web-view組件標(biāo)簽中設(shè)置onMessage屬性,監(jiān)聽web-view中傳過來的消息,并對其進(jìn)行相應(yīng)的處理:
<web-view src="https://example.com/h5page" @message="onMessage"></web-view> export default { methods: { onMessage (event) { // 對從web-view中接收到的消息進(jìn)行處理 console.log('收到來自web-view的消息:', event.detail.data) // 將消息發(fā)送到uni-app中的事件總線 EventBus.$emit('messageFromH5', event.detail.data) } } }
這里的onMessage()方法通過監(jiān)聽web-view的message事件來實(shí)現(xiàn)對從web-view中傳過來的消息進(jìn)行處理。同時(shí),將接收到的消息發(fā)送到uni-app頁面中已經(jīng)創(chuàng)建的事件總線中,以便不在內(nèi)嵌的頁面也能夠接收消息。
到此這篇關(guān)于web-view內(nèi)嵌H5與uniapp數(shù)據(jù)的實(shí)時(shí)傳遞的文章就介紹到這了,更多相關(guān)web-view內(nèi)嵌H5內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript 在各個(gè)瀏覽器中執(zhí)行的耐性
經(jīng)常會(huì)遇到這樣一個(gè)情況:瀏覽器彈出對話框,提示腳本運(yùn)行時(shí)間過長,詢問“停止”還是“繼續(xù)”。那究竟各個(gè)瀏覽器是如何判斷在什么時(shí)候才彈出此對話框呢?2009-04-04小程序?qū)崿F(xiàn)Token生成與驗(yàn)證
本文主要介紹了小程序?qū)崿F(xiàn)Token生成與驗(yàn)證,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12js實(shí)現(xiàn)的點(diǎn)擊數(shù)量加一可操作數(shù)據(jù)庫
這篇文章主要介紹了js如何實(shí)現(xiàn)的點(diǎn)擊數(shù)量加一操作數(shù)據(jù)庫,需要的朋友可以參考下2014-05-05詳解微信小程序自定義組件的實(shí)現(xiàn)及數(shù)據(jù)交互
這篇文章主要介紹了微信小程序自定義組件的實(shí)現(xiàn)及數(shù)據(jù)交互,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07javascript數(shù)組的擴(kuò)展實(shí)現(xiàn)代碼集合
非常不錯(cuò)的javascript數(shù)據(jù)功能增強(qiáng)函數(shù)2008-06-06JS實(shí)現(xiàn)很實(shí)用的對聯(lián)廣告代碼(可自適應(yīng)高度)
這篇文章主要介紹了JS實(shí)現(xiàn)很實(shí)用的對聯(lián)廣告代碼,可實(shí)現(xiàn)固定相對位置懸浮展示及跟隨屏幕上下滑動(dòng)等功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09