【问题标题】:window.opener is null (iOS 12.3.1 Safari and Chrome)window.opener 为空(iOS 12.3.1 Safari 和 Chrome)
【发布时间】:2019-07-16 15:27:00
【问题描述】:

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

有很多旧的(一些非常旧的)“window.opener 为空”问题,以及 2016 年关闭的 Chromium bug。这似乎是一个来来去去的问题与版本。它有很多变体,我看不到任何解决方案确实有效。我的情况与一些较早的问题之间的主要区别:

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

【问题讨论】:

    标签: javascript ios window.opener


    【解决方案1】:

    经过大量搜索,我发现了这个:

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

    总结:实验:锚点上的 target=_blank 应该暗示 rel=noopener

    还有这个:

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

    更改了锚点上的 target="_blank" 以暗示 rel="noopener"

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

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

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

    【讨论】:

    • 就像 chrome 中的魅力。谢谢楼主
    猜你喜欢
    • 2013-01-16
    • 1970-01-01
    • 2011-10-30
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多