Window.open-覆盖浏览器窗口选项卡

时间:2020-02-17 19:56:50

标签: javascript window.open

假设我有两个Web应用程序。

在我的第一个Web应用程序中,有一个使用window.open的按钮,当用户单击该按钮时,它会打开一个带有新URL链接的新标签。打开新选项卡时,会将目标名称添加到该选项卡。

例如,window.open(url,“ foo”); 新标签会打开目标名称为“ foo”的网址。

现在,我有第二个Web应用程序,该应用程序还具有一个使用window.open的按钮。如果用户单击此按钮,则无论该选项卡是从第一个Web应用程序打开还是从第二个Web应用程序打开,我都希望覆盖名称为“ foo”的任何选项卡。

在第二个Web应用程序中,它也使用window.open(url,“ foo”)。与第一个Web应用程序完全相同的代码。

问题在于,只有从同一Web应用程序创建选项卡后,该选项卡才会被替换。如果用户单击该按钮并从第一个Web应用程序创建一个新选项卡,并且用户从第二个Web应用程序单击该按钮,则它会覆盖第一个Web应用程序中的选项卡,但会创建另一个新选项卡,尽管目标名称相同。

有什么办法可以覆盖具有目标名称的任何标签?

1 个答案:

答案 0 :(得分:0)

否,这是一项安全功能。

我找不到参考链接,但是窗口重用的另一个要求是window.opener属性必须相同。

例如,如果您有两个这样的链接:

<a href="https://en.wikipedia.org/wiki/Foo" target="foo">Foo on Wikipedia</a>
<a href="https://en.wikipedia.org/wiki/Bar" target="foo">Bar on Wikipedia</a>

然后单击每个按钮将重复使用同一窗口,因为目标是相同的,并且包含链接的窗口与目标窗口上的window.opener的值匹配。

如果您将rel="noopener"添加到这样的链接中:

<a href="https://en.wikipedia.org/wiki/Foo" target="foo" rel="noopener">Foo on Wikipedia</a>
<a href="https://en.wikipedia.org/wiki/Bar" target="foo" rel="noopener">Bar on Wikipedia</a>

然后将不会重复使用该窗口(即使目标匹配),因为window.opener的值将与原始窗口不匹配。