js postMessage 实现跨域发送消息-应用示例

postMessage 可以跨域发送消息

parentPage.html 父页面(A地址下) 界面添加 打开子页面按钮、发送消息按钮

html 复制代码
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<button onclick="openPage()">打开子页面</button>
		<button onclick="sendMsg()">发送消息</button>
		<script>
			let childWindow = null;
			
			function openPage(){
				childWindow = window.open('http://localhost:8011/','_blank');
			}
			
			function sendMsg(){
				if (!childWindow || childWindow.closed) {
					childWindow = window.open('http://localhost:8011/','_blank');
				}
				
				setTimeout(function () {
					childWindow.postMessage("发送消息内容测试", "http://localhost:8011/");
					// childWindow.postMessage("发送消息内容测试", "*");
				}, 300);
			}
		</script>
	</body>
</html>

子页面subPage.html(B地址下)

html 复制代码
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			window.addEventListener("message", receiveMessage, false);
			
			function receiveMessage(event) {
				console.log('收到消息:', event.data,event.source,window.opener);
				
				if (!event.source || event.source !== window.opener) {
					return;
				}
				
				// 这里用父窗口作为来源校验,适配本地文件/本地服务器打开方式
				console.log('来自父页面的消息:', event.data);
			}
		</script>
	</body>
</html>

运行效果:

下图为 子页面 负责监听接受消息

相关推荐
三十而立洋1 天前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁1 天前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
李少兄1 天前
JavaScript 隐式全局变量解析
javascript
沙蒿同学1 天前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端
paopaokaka_luck1 天前
智慧社区综合服务小程序(人脸识别、AI问答、Echarts图形化分析)
前端·javascript·spring boot·spring·数据分析·echarts
Hilaku1 天前
为什么死磕 1px 的团队,用户体验反而更差?
前端·javascript·程序员
陈拉斯1 天前
给公司年会写了个大屏抽奖系统:动画在前端跑,凭什么说结果没被改?
javascript
yzy851 天前
Vue中下载或打开文件的JavaScript方法
前端·javascript·vue
用户298698530141 天前
在 React 中用 JavaScript 将 Word 转换为文本
前端·javascript·react.js
李少兄1 天前
深入解析 JavaScript 中的 `document` 对象
javascript