问题: window.open
无法在同一会话中打开,应该如何解决?
答案:
当使用 window.open
函数打开新窗口或标签页时,如果已经在同一个会话中打开了该窗口或标签页,window.open
将无法再次打开同一窗口或标签页。这种情况可能会在您尝试打开已打开的窗口或标签页时发生。
要解决这个问题,您可以尝试使用以下方法:
window.open
调用:
在调用 window.open
时使用不同的参数,以创建一个具有新 URL 的窗口或标签页。这样,新窗口或标签页将不会覆盖同一会话中的现有窗口或标签页。示例:
// 打开一个新窗口或标签页
window.open('https://www.example.com', '_blank');
// 打开另一个具有不同 URL 的窗口或标签页
window.open('https://www.example2.com', '_blank');
window.open
的 dependent
参数:
使用 dependent
参数告诉浏览器在新窗口或标签页打开时,如果已经打开了一个相同类型的窗口或标签页,则不执行打开操作。示例:
// 打开一个新窗口或标签页
window.open('https://www.example.com', '_blank', { dependent: true });
sessionStorage
或 localStorage
存储窗口或标签页的 ID:
在新窗口或标签页中,将当前窗口或标签页的 ID 存储到 sessionStorage
或 localStorage
中。然后在关闭新窗口或标签页时,从 sessionStorage
或 localStorage
中删除该 ID。这样,当您尝试再次打开新窗口或标签页时,浏览器将知道它不是同一窗口或标签页。示例:
// 在新窗口或标签页中
const currentWindowId = window.location.href;
sessionStorage.setItem('windowId', currentWindowId);
// 在关闭新窗口或标签页时
window.addEventListener('unload', function () {
const currentWindowId = sessionStorage.getItem('windowId');
if (currentWindowId) {
window.location.href = currentWindowId;
}
});
以上方法可以帮助您解决 window.open
无法在同一会话中打开的问题。
云+社区沙龙online第5期[架构演进]
云+社区沙龙online第6期[开源之道]
腾讯技术创作特训营第二季
云+社区技术沙龙[第19期]
DBTalk
云+社区开发者大会(苏州站)
Elastic 实战工作坊
Elastic 实战工作坊
云+社区技术沙龙[第20期]
云原生正发声
领取专属 10元无门槛券
手把手带您无忧上云