示例图
问题
问题1:纯H5版vue页面中的uni.postMessage报错未定义 - js文件引用、npm引用都不行;
问题2:H5环境下的webview无法捕捉hybrid/html文件的uni.postMessage消息 - 一点反应都没有;
解决办法
1.纯H5版vue页面中的uni.postMessage报错未定义,那就另辟蹊径,
webview中的vue页面先通过window.location.href跳到项目的hybrid/html某页面中,
再按照官方手册即可引入"uni.webview.1.5.5.js",即可使用
uni.webView.postMessage({
data: JSON.stringify(sendData)
})
2.H5环境下的webview无法捕捉hybrid/html文件的uni.postMessage消息?
看以下完整代码
window.addEventListener("message", (event) => {
// 全量打印
console.log(event)
}, false)
完整代码
hybrid/html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title> </title> </head> <body><div></div></body> <!-- 主业务操作 --> <script type="text/javascript" src="../static/js/uni.webview.1.5.5.js"></script> <script> document.addEventListener('UniAppJSBridgeReady', () => { uni.webView.getEnv((res) => { console.log('webview页面:goback') console.log('当前环境:' + JSON.stringify(res)) // pData.ready = true }) let sendData = { action: 'back', data: { url: window.location.href } } console.log('webview页面:goback > 跳转命令参数') console.log(JSON.stringify(sendData)) uni.webView.postMessage({ data: JSON.stringify(sendData) }) console.log('webview页面:goback > uni.webView.postMessage完成') console.log('webview页面:goback > 跳转命令发送完成') }) </script> </html>
复制
commonWebView.vue
<template> <view> <!-- 数据加载中 --> <view class="sysCoverBoxFullAndCenter" v-if="!pData.url"> 加载中 </view> <!-- 数据已加载 --> <view v-if="pData.url"> <web-view :webview-styles="webviewStyles" :src="pData.url" @message="handleWebviewMessage" @onPostMessage="handlePostMessage" ></web-view> </view> </view> </template> <style> </style> <script setup> import { reactive, ref, onMounted } from 'vue' import { onLoad } from '@dcloudio/uni-app' // 风格 const webviewStyles = reactive({ progress: { color: '#1379ff' } }) // 页面数据 const pData = reactive({ // 地址 url: 'https://baidu.rudon.cn/' }) /** * APP环境下的接收方法 */ const handleWebviewMessage = (data) => { } // webview向外部发送消息 const handlePostMessage = (data) => { } // 页面启动 onLoad(()=>{ // #ifdef H5 // uniapp webview h5 通信 window.postMessage 方式 // https://blog.csdn.net/qq_42313445/article/details/127068570 window.addEventListener("message", (event) => { // 全量打印 console.log(event) // 只看关键消息 console.log(event.data) // hybrid页面通过uni.webView.postMessage传递的data结构 let event_data = event.data.data.arg console.log(event_data) }, false) // #endif }) </script>
复制
... done ...