window.opener is null (iOS 12.3.1 Safari and Chrome)



有一个target=_blank链接。链接页面中的脚本使用window.opener,这已经工作了多年,但现在它在 iOS 上坏了,因为window.openernull.我能做什么?

有很多旧的(有些非常古老的)"window.opener is null"问题,以及一个在2016年关闭的Chromium错误。这似乎是版本来来去去的问题。它有很多变体,我看不到任何实际有效的解决方案。我的情况与一些旧问题之间的主要区别:

  • 我没有跨域链接。
  • 我在 Safari 和 Chrome 中都看到了空值,其他人在一个中看到它,但在另一个中没有看到它。
  • 我有target=_blank,不是window.open()

经过多次搜索,我找到了这个:

https://bugs.webkit.org/show_bug.cgi?id=190481

摘要:实验:锚点上的目标=_blank应该意味着rel=noopener

而这个:

https://webkit.org/blog/8475/release-notes-for-safari-technology-preview-68/

更改了锚点上的目标="_blank"以暗示rel="noopener">

从我从iPhone用户那里收到的投诉数量来看,我很确定这个重大变化已经出现在Safari的稳定版本中,尽管那些标记为"实验性"和"预览"的链接是我能找到的唯一文档。

Mozilla记录了Firefox(https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Experimental_features#Security)的类似功能,但与Apple不同的是,他们的文档清晰正确地将其标记为稳定版本中未启用的实验。

若要恢复旧行为,需要向<a>元素添加rel="opener"。MDN 提到了这一点,不是在我window.opener停止工作时我正在寻找的window.opener页面上,而是在一个名为链接类型的页面上,我只有在我知道答案后才能找到它。他们将其标记为"实验性,不要在生产代码中使用",但我认为我别无选择。

最新更新