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>

运行效果:

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

相关推荐
幻境如梦丶皆为虚5 分钟前
从零写一个 DSH 插件:在左侧菜单栏加一个「测试」
开发语言·javascript·ecmascript
吹什么轩8 分钟前
constexpr 完全指南:从 const 的两种含义,到编译期计算的四次演进
java·前端·javascript
程序员大阳3 小时前
副队长JavaScript教程(67)-Ajax初识:背景、历史与核心概念
javascript·ajax·同步·异步·概念·背景·来是
程序员大阳3 小时前
副队长JavaScript教程(70)-Ajax同源策略与跨域
javascript·ajax·同源策略·跨越·corp
普通人63 小时前
Web端3D模型加载实战指南_Vue3_uni-app_HTML
前端·javascript·uni-app·html
志尊宝3 小时前
AI原生前端开发(042):AI辅助的路由设计与优化
javascript·react.js·ai-native
Dxy123931021614 小时前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷14 小时前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++
椒哥16 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
kyriewen17 小时前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员