window.open( " " , tabName) 返回 about:blank 在本地存储中带有选项卡名称



我有一个角度应用程序,我想在其中显示不同的页面,每个页面都在单独的浏览器选项卡中显示。我希望每个页面只能有一个打开的选项卡。例如,如果用户单击以打开一个页面,并且该页面已在选项卡中打开,则它应该导航到现有选项卡,否则将打开一个新选项卡。 我使用localStorage工作得很好。所有页面都是从主页触发的,这是我让它工作的方式:

在我的主页组件中,我有以下方法,每次打开新页面时都会调用该方法 (注意:我正在使用 env 变量来区分用户何时为不同的环境打开不同的应用程序页面(

loadGrid(gridId : string)
{
let tabName = localStorage.getItem(this.gridEnv+'-'+gridId);
if(tabName)
{
window.open("", tabName).focus;
}
else
{
let url = "dataGrid/"+gridId;
localStorage.setItem(this.gridEnv+'-'+gridId, url);
window.open(url, url).focus();
}
}

它基本上检查我是否已将此页面存储在 LocalStorage 中,如果是,则转到它,否则创建一个新选项卡,然后将其存储在 LocalStorage 中。 当我打开主页 opne 并打开一个选项卡时,我的本地存储将如下所示

Storage {local-Home: "hometab", local-1: "dataGrid/1", length: 2}

Local-Home 用于主页,因此,如果任何打开的页面想要导航到主页,这会将它们带到已打开的主页选项卡

local-1 是打开的页面之一,如果用户尝试打开同一页面,则会将他们带到已打开的选项卡。

这很好用。

现在的问题 如果用户决定在不同的选项卡中打开另一个主页 (另 http://localhost:4200( 并尝试打开已经从上一个主页打开的页面之一,我得到空白页面。甚至认为它会检查选项卡名称是否已在本地存储中。

本地存储是否关心父页面? 我的理解是 window.open(", tabName( 应该将我带到选项卡,无论它是从哪个父级发起的,不是这样吗? 当我打开新的主页时,如果另一个主页已经打开,则不会更新本地存储。我应该在每次打开新的主页时清除本地存储吗?如果我这样做,其他打开的选项卡会发生什么情况?

您希望每个页面只能有一个打开的选项卡。 然后您可以直接使用导航功能

navigate(['your-localstoarge-navigating-component'])

最新更新