【发布时间】:2021-09-14 23:13:55
【问题描述】:
我刚刚了解了rel="noopener" 属性,它使打开的窗口不知道它们的开启器。我玩了一下,一直得到window.opener === null,直到我发现它现在是所有现代浏览器的新默认值。
现在,我想实际阅读window.opener 属性,看看它是如何工作的:
<!-- http://opener-from.test/ -->
<a href="http://opener-to.test/" target="_blank">no rel</a>
<a href="http://opener-to.test/" target="_blank" rel="opener">rel="opener"</a>
<a href="http://opener-to.test/" target="_blank" rel="noopener">rel="noopener"</a>
<!-- http://opener-to.test/ -->
<script>
console.log(window.opener);
</script>
no rel 和 rel="noopener" 链接只会使目的地获得 window.opener === null。至于rel="opener",它在 Firefox 和 Safari 上运行良好,但在 Google Chrome 中我得到了错误:
Uncaught DOMException: Blocked a frame with origin "http://opener-to.test" 访问跨域框架。
我在 Chrome 91 中对其进行了测试。如何在 Google Chrome 中的 target="_blank" 上下文中访问 window.opener?
【问题讨论】:
-
关于错误消息的(来源)不清楚的地方 - "Blocked a frame with origin "opener-to.test" from access a cross-原框架" ?
-
问题是如何允许来自
opener-to.test。 -
@sideshowbarker 我在写我的之前已经看过这篇文章。仍然不明白为什么 Chrome 会抛出错误,而其他浏览器则不会。
标签: javascript html google-chrome same-origin-policy window.opener