需求
A 页面中点击按钮可以打开新的标签页 B 并且向 B 页面发送消息数据。
当新的标签页 B 未关闭且符合同源策略时,再次点击按钮,可以自动跳转到标签页 B 并且发生消息数据。
B.html
<script>window.onmessage = evt => {console.log(evt.data);}
</script>
页面自动定位方法
一、window.open(url, target)
A.html
<button>B Page</button>
<script>const button = document.querySelector("button");let child = null;button.addEventListener("click", () => {child = window.open("http://127.0.0.1:5500/B.html", "BPage");child.postMessage("hello");});
</script>
Window:open() 方法 - Web API 接口参考 | MDN
参数 target: 一个不含空格的字符串,用于指定加载资源的浏览上下文的名称。如果该名称无法识别现有的上下文,则会创建一个新的上下文,并赋予指定的名称。还可以使用特殊的 target 关键字:_self
、_blank
、_parent
和 _top
。
二、window.focus()
A.html
<button>B Page</button>
<script>const button = document.querySelector("button");let child = null;button.addEventListener("click", () => {if (child) {child.focus();} else {child = window.open("http://127.0.0.1:5500/B.html");}child.postMessage("hello");});
</script>
三、a 超链接
<a href="http://127.0.0.1:5500/B.html" target="BPage">Open B Page
</a>
运行
- 如上创建 A、B html 文件
- 安装并使用 VsCode LiveServer 插件
- 点击右下角状态栏的 “Go Live”
点击后(默认端口 5500): - 打开 http://127.0.0.1:5500/A.html 进行测试即可