浏览器窗口切换(从一个页面切换到另一个页面并且不刷新)

本文介绍了一种在浏览器中从一个页面跳转到另一个通过window.open打开的同源页面的方法,利用window.name属性实现页面间的相互切换。在A页面通过window.open打开B页面后,B页面可通过window.opener.name获取A页面的window.name,从而实现跳转。

从一个页面跳转到另一个浏览器打开过的页面(只有通过window.open 打开的同源页面才能相互切换)

window.open("javascript:;", name);

第一项参数 javascript: 后可添加js 代码也会执行。
第二项参数 name 即要跳转到页面的 window.name。

如果在A页面里通过 window.open 打开一个新页面 B ,那么在B页面内可通过window.opener.name 拿到A页面的 window.name 去跳转到A页面,即:

window.open("javascript:;", window.opener.name);
### 实现页面间通信与刷新控制 在 Vue 3 中实现页面间通信并控制页面刷新行为,可以通过结合浏览器的 `window.open()`、`window.postMessage()` 和 `beforeunload` 事件来完成。目标是在打开新窗口并在关闭该窗口时触发原页面刷新,而在同一窗口切换页面刷新内容。 #### 打开新窗口并监听关闭状态 使用 `window.open()` 方法可以打开新窗口,同时可以通过轮询 `window.closed` 属性来检测新窗口是否已关闭。一旦检测到窗口关闭,可以触发原页面刷新操作: ```javascript const newWindow = window.open('/new-page'); const checkWindowClosed = setInterval(() => { if (newWindow.closed) { clearInterval(checkWindowClosed); location.reload(); // 刷新当前页面 } }, 500); ``` 此方法通过定时检查新窗口是否关闭,来决定是否执行页面刷新操作。 #### 使用 `window.postMessage()` 实现跨窗口通信 若希望在关闭新窗口时主动通知原页面刷新,可以使用 `window.postMessage()` 实现跨窗口通信。在新窗口中,当用户点击关闭按钮或触发 `beforeunload` 事件时,向原窗口发送消息: ```javascript // 新窗口中发送消息 window.opener.postMessage('refreshParent', '*'); // 原窗口中监听消息 window.addEventListener('message', (event) => { if (event.data === 'refreshParent') { location.reload(); } }); ``` 该方法确保在新窗口关闭时,原页面可以及时刷新。 #### 同一窗口切换页面刷新 在 Vue 3 的单页应用中,使用 Vue Router 进行页面切换时,默认刷新页面。可以通过监听路由变化并更新组件状态来实现局部更新: ```javascript import { useRoute } from 'vue-router'; import { watch } from 'vue'; export default { setup() { const route = useRoute(); watch( () => route.path, (newPath) => { // 根据 newPath 更新组件状态,刷新整个页面 } ); } }; ``` 此方式确保在页面切换时仅更新所需部分,而是重新加载整个页面。 #### 示例:在 Vue 3 中整合上述逻辑 以下是一个完整的 Vue 3 组件示例,展示如何打开新窗口并在关闭时刷新页面: ```javascript import { onMounted, onUnmounted } from 'vue'; import { useRoute } from 'vue-router'; export default { setup() { const route = useRoute(); let newWindow = null; let checkWindowClosed = null; const openNewWindow = () => { newWindow = window.open('/new-page'); checkWindowClosed = setInterval(() => { if (newWindow && newWindow.closed) { clearInterval(checkWindowClosed); location.reload(); } }, 500); }; const handleRouteChange = () => { // 在同一窗口切换页面刷新 }; onMounted(() => { window.addEventListener('message', (event) => { if (event.data === 'refreshParent') { location.reload(); } }); route.watch(() => route.path, handleRouteChange); }); onUnmounted(() => { window.removeEventListener('message', () => {}); }); return { openNewWindow }; } }; ``` 该组件实现了打开新窗口、监听关闭状态并刷新页面的功能,同时确保在单页应用内切换路由时刷新页面。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值