【问题标题】:window.opener is null... didn't use to bewindow.opener 为空...以前不是
【发布时间】:2021-05-18 09:23:59
【问题描述】:

在我们的软件中,我们有一个带有链接的页面,该链接使用 target='_blank' 在新选项卡中打开同一站点内的页面。当用户在新打开的页面上完成工作时,他们单击一个按钮,当页面刷新时,它会调用以下代码。

window.opener.location.href = window.opener.location.href; window.close();

这已经运行了很长时间,但在上周左右停止在所有浏览器中运行。当我在谷歌上搜索有关正在实施的新安全限制会导致这种情况时,我似乎找不到任何东西。知道发生了什么以及如何让它再次工作吗?我已经在 chrome、firefox、edge 和 IE11 中测试了以下代码。除了 IE11 window.opener 之外的所有内容都是空的。在 IE 中它不是。浏览器中是否有可能导致这种情况的新安全设置?

<html>
<body>
<a href="page2.html" target="_blank">click me</a>
</body>
</html>

<html>
<body>
<script>
alert(window.opener === null);
</script>
</body>
</html>

【问题讨论】:

  • 代码window.opener.location.href = window.opener.location.href 的意义是什么?它将当前网址分配给自己。
  • 新窗口允许用户更改与打开器窗口中的数据相关的数据。因此,当它们完成后,我们希望基本上刷新打开器以显示最新数据。
  • 那为什么不使用.reload()呢?
  • .reload() 不是函数。但即使没有,问题是 window.opener 为空。如果它为空,我无法调用 reload。
  • 不可能所有浏览器都同时实现这样的改变。你确定你的代码没有改变吗?

标签: javascript google-chrome firefox browser microsoft-edge


【解决方案1】:

我不确定您在哪个版本的 chrome 浏览器上测试了您的代码。为了避免“tab-napping”攻击,许多浏览器已经开始默认为针对 _blank 的锚实现 noopener 行为。

Chrome 在release 88 中启用了 noopener 行为。

Safari 在release 68 中也启用了此功能。

我找不到任何有关 IE 11 更改的参考。但是值得尝试在带有 target=_blank

的锚标签中添加 rel="opener"

【讨论】:

    猜你喜欢
    • 2011-10-30
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    相关资源
    最近更新 更多