iframe利用postMessage通讯

父级 

iframe1
<iframe src="http://192.168.2.124:5500/开发测试/iframe测试/iframe_通讯2.html" id="myIFrame"></iframe>
<script type="text/javascript">
	//监听消息反馈
	window.addEventListener('message',function(event) {
		console.log('iframe1 ev',event.data);
	},false);
	
	 window.onload=function(){
		 window.frames[0].postMessage('getcolor','http://192.168.2.124:5500');
	 }
</script>

子级  

iframe2
<script type="text/javascript">
	//发送消息
	setInterval(function () {
		var message = 'Hello!  The time is: ' + (new Date().getTime());
		console.log('iframe 2 ');
		//send the message and target URI
		window.top.postMessage(message, 'http://192.168.2.124:8848');
	}, 4000);

	window.addEventListener('message', function (event) {
		console.log('iframe2 ev', event.data);
	}, false);
</script>

 

### Vue.js 中使用 `postMessage` 进行跨窗口通信 在 Vue.js 开发中,可以利用 JavaScript 的 `window.postMessage()` 方法实现不同窗口之间的消息传递。此方法允许来自不同源的安全通信。 #### 创建父页面嵌入子窗口 假设有一个主页面 (parent.html),其中包含一个 IFrame 来加载另一个网页作为子页面: ```html <!-- parent.vue --> <template> <div id="app"> <iframe ref="childIframe" src="./child.html"></iframe> <button @click="sendMessage">发送消息给子窗口</button> </div> </template> <script> export default { methods: { sendMessage() { const message = '这是来自父级的消息'; this.$refs.childIframe.contentWindow.postMessage(message, '*'); } }, }; </script> ``` 这里定义了一个按钮用于触发向 iframe 发送消息的操作,通过 `$refs` 获取到 iframe 对象来调用其 `contentWindow.postMessage()` 函数[^1]。 #### 子页面监听消息事件 接着,在被嵌套的子页面(child.html)里设置好接收机制: ```javascript // child.js 或者内联 script 标签中的 js 部分 window.addEventListener('message', function(event) { console.log(`收到消息:${event.data}`); // 安全验证目标域名 if (event.origin !== "http://example.com") { return; } alert(`接收到的信息是 ${event.data}`); }); ``` 这段脚本会监听页面上的所有 `message` 类型事件,打印出所接受的数据。为了防止潜在的安全风险,应该始终检查 `event.origin` 属性以确认消息确实来自于预期的位置[^2]。 #### 双向通讯支持 如果希望两个方向都能互相交流,则可以在任意一方再次发起新的 `postMessage` 请求。例如,当子页面想要回应时也可以主动调用 `opener.postMessage()` 或者保存父页面传来的 `source` 参数以便后续回复。 ```javascript function respondToParent(data){ window.parent.postMessage(data,'*'); // 向上层框架发送数据 } ``` 以上就是基于 Vue.js 应用程序的一个简单的 `postMessage` 跨文档/窗口通信的例子说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值