window.opener 引用在 Firefox 中丢失

window.opener reference lost in Firefox

考虑以下情况:

Visual reperesentation of steps

注意:我们无法控制网站 C,也无法控制他们如何重定向回网站 B。 此外,这仅在 Firefox/Safari 上发生。在 Chrome 上,我们能够在重定向后获得原始的 opener 参考。

如果网站 C 使用 rel=noopener 重定向,window.opener 应该为空 (Reference from MDN)。我不明白在什么情况下 window.opener 可以是当前的 window 对象以及为什么它发生在 Firefox/Safari 而不是 Chrome?除了网站 C,我们还能在其他任何地方做些什么来防止这种情况发生吗?

这在 firefox 和 Safari 中是可能的,当您添加目标 _self 时,window.opener 可以是当前的 window。如果您这样做 window.open('someurl', '_self'),那么 window.opener 将成为当前 window,并且将在同一选项卡中打开,而不是在新选项卡中打开。这只发生在 safari 和 firefox 中(据我观察)。所有基于 chromium 的浏览器在任何情况下都不会更改原始的 window opener。

我不知道safari和firefox这样处理的确切原因我试图找到原因但找不到。

我曾经遇到过这个问题,我们所做的解决方案是要求网站 C 使用 window.location.replacewindow.location.href 重定向回网站 B,以便他们在同一选项卡中打开网站 b。