【问题标题】:Window.open - Override browser window tabWindow.open - 覆盖浏览器窗口选项卡
【发布时间】:2020-06-01 19:18:53
【问题描述】:

假设我有两个网络应用程序。

在我的第一个网络应用程序中,有一个使用 window.open 的按钮,当用户单击该按钮时,它会打开一个带有新 url 链接的新选项卡。当它打开新选项卡时,它会将目标名称放入该选项卡。

例如 window.open(url, "foo"); 新选项卡会打开目标名称为“foo”的 url。

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

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

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

有什么方法可以覆盖任何具有目标名称的选项卡?

【问题讨论】:

    标签: javascript window.open


    【解决方案1】:

    不,这是一项安全功能。

    我找不到参考链接,但是窗口重用的一个额外要求是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 的值不会匹配原始窗口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 2012-06-11
      • 1970-01-01
      • 2023-03-21
      • 2019-10-21
      相关资源
      最近更新 更多