最近需要写一个uni-app项目,使用nvue创建app,嵌入webview引用vue项目,在这个过程中需要实现互相通讯。而由于webview中引入的是vue项目而不是uni-app项目,所以不能支持uni.postMessage方法,需要直接使用window.postMessage方法实现。
查看官网的说明:
关于示例中,有一点理解误区,导致后续编写demo时,无法成功发送消息。postMessage的第二个参数targetOrigin是目标源,而不是当前源。也就是说,要给谁发消息,就设置谁的域名。
demo
父页面
<template>
<div id="app">
<iframe src="http://daohang.zjh336.cn/demo/index.html"/>
<button @click="sendMessage">发送消息</button>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data () {
return {
}
},
methods:{
sendMessage(){
console.log('开始发送消息了')
window.frames[0].postMessage('skipPage2','http://daohang.zjh336.cn')
}
},
mounted () {
window.addEventListener('message', (event) => {
console.log("父组件收到的消息为:"+JSON.stringify(event.data) + ',' + event.origin)
}, false);
}
}
</script>子页面
<script>
//监听消息反馈
window.addEventListener('message', (event) => {
console.log("子组件收到消息:"+JSON.stringify(event.data) + ',' + event.origin)
event.source.postMessage('回复:123456',event.origin)
}, false);
</script>实际效果:






还没有评论,来说两句吧...