有一个target=_blank
链接。链接页面中的脚本使用window.opener
,这已经工作了多年,但现在它在 iOS 上坏了,因为window.opener
null
.我能做什么?
有很多旧的(有些非常古老的)"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
页面上,而是在一个名为链接类型的页面上,我只有在我知道答案后才能找到它。他们将其标记为"实验性,不要在生产代码中使用",但我认为我别无选择。