NVM
安装包:
Releases · coreybutler/nvm-windows · GitHub
git 仓库分支名称改了
image.png
window.open
Q:
在 A 页面,通过 window.open
打开 B 页面。回到 A 页面,通过 window.open
打开 C 页面,为什么有时候是在新标签页打开,有时候是覆盖了 B 页面?
A:
在这种情况下,A 页面通过 window.open
打开 B 页面后,用户再回到 A 页面并尝试打开 C 页面时,C 页面是否在新标签页中打开或覆盖 B 页面,主要受到以下几个因素的影响:
-
窗口和标签页的上下文:
- 当你从 A 页面打开 B 页面时,B 页面通常是在一个新的标签页或窗口中打开。
- 返回到 A 页面后再次使用
window.open
打开 C 页面时,如果没有指定目标,C 页面可能会在 B 页的上下文中打开,这可能导致覆盖 B 页面。
-
使用的目标参数:
-
window.open
的第二个参数(目标)可以指定新的窗口或标签页的行为。例如:- 使用
window.open('C.html', '_blank')
可以强制在新的标签页中打开。 - 如果目标是一个已经存在的页面的名称,如
window.open('C.html', 'B')
,那么 C 页面将会在 B 页中打开,导致覆盖。
- 使用
-
-
用户的浏览器设置:
- 不同的浏览器和用户所配置的设置可能影响页面的打开方式。例如,某些浏览器可以配置在新标签页中打开所有链接,而其他设置可能会导致链接在当前标签页中打开。
-
浏览器行为:
- 某些浏览器在打开页面时对新标签页和窗口的管理方式可能存在不同。在某些情况下,浏览器会优先选择复用现有标签页。
-
JavaScript 回调或事件:
- 如果在 A 页面与 C 页面之间有 JavaScript 交互(如通过 postMessage),这可能影响 C 页面打开的方式。
为了确保 C 页面始终在新标签页中打开,推荐始终使用 _blank
作为目标参数,例如:
window.open('C.html', '_blank');
这样可以减少覆盖 B 页的可能性,确保用户体验的一致性。
例子
const subsystemWindowName = JSON.stringify({
token: $token.get(),
appName: item.name,
});
const url = router.resolve({ path: '/index' }).href;
subsystemWindow = window.open(url, subsystemWindowName);