uni-app中app端使用plus.webview.create创建窗口后,webview窗口如何向外部传递信息
uni-app中app端使用plus.webview.create创建窗口后,webview窗口如何向外部传递信息
如何在使用 plus.webview.create
创建的窗口内向外部发送消息
不使用 <web-view>
标签创建,而是使用 plus.webview.create
创建窗口(不想进行页面跳转),webview窗口内如何向外部发送消息
webview和uni-app的双向通信可以使用以下方式:
webview/h5 发送消息:
plus.webview.postMessageToUniNView({
type: ‘toUniAPP’,
args: {
arg1: ‘123’
}
}, ‘__uniapp__service’);
uni-app 接受消息:
plus.globalEvent.addEventListener(‘plusMessage’, (message)=>{
// message打印的结果:
// {
// “data”: {
// “type”: “toUniAPP”,
// “args”: {
// “arg1”: “123”
// }
// },
// “targetId”: “__uniapp__service”,
// “originId”: “NWindow101677899611098”
// }
})
在uni-app中,通过plus.webview.create
创建的webview窗口与外部进行通信,可以通过postMessage
方法和监听message
事件来实现。以下是一个简单的代码示例,展示如何在webview窗口与外部之间传递信息。
主窗口代码(外部页面)
首先,在主窗口(外部页面)中创建一个webview窗口,并监听其message
事件来获取webview窗口传递的信息。
// 创建webview窗口
let webview = plus.webview.create('webview-page.html', 'webview', {
top: '0px',
bottom: '0px'
});
// 显示webview窗口
webview.show();
// 监听webview窗口的message事件
webview.addEventListener('message', function(event) {
console.log('Received message from webview:', event.message);
// 在这里处理从webview窗口接收到的信息
// 例如,可以更新主窗口的某些UI元素
document.getElementById('main-content').innerText = event.message;
});
Webview窗口代码(内部页面 - webview-page.html)
在webview窗口(内部页面)中,使用postMessage
方法向外部传递信息。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Webview Page</title>
</head>
<body>
<button onclick="sendMessage()">Send Message to Main Window</button>
<script>
// 发送消息到主窗口
function sendMessage() {
let message = 'Hello from webview!';
// 使用postMessage方法发送消息
window.parent.postMessage(message, '*'); // 注意:'*' 表示接受消息的目标源,生产环境中应替换为具体源
console.log('Message sent:', message);
}
</script>
</body>
</html>
注意事项
-
安全性:在
postMessage
的第二个参数中,'*'
表示接受消息的目标源可以是任何源。在实际应用中,为了安全起见,应将其替换为具体的源地址,以避免跨源消息泄露。 -
事件监听:确保在主窗口中正确监听
message
事件,以便接收并处理来自webview窗口的信息。 -
页面加载:在webview窗口的页面完全加载后再进行通信操作,以避免因页面未加载完成而导致的通信失败。
通过上述代码示例,你可以在uni-app中实现webview窗口与外部页面之间的信息传递。