当在同一窗口中打开 URL 时,窗口.Opener 是未定义的

window.opener is undefined when the url is opened in same window

本文关键字:窗口 Opener 未定义 URL      更新时间:2023-09-26

在我们的Angulajs控制器中,我们尝试在同一窗口中打开一个外部URL(这是在同一浏览器中打开URL的要求,而不是创建弹出窗口),使用以下行:

window.open("www.youraddress.com","_self")

当我们尝试获取父窗口的实例(以访问控制器方法)时,我们总是window.openerundefined。你能告诉我可能是什么原因吗?

如果我们使用window.location.href="www.youraddress.com"可以看到相同的行为

请让我知道我们在这里错过了什么?

如果在同一窗口中打开页面,则旧窗口对象将被销毁。不再有可供window.opener引用的对象。只有当窗口仍然存在时,您才能继续引用它。即使可以,您也会被拒绝访问其内容,因为您将外部 URL 加载到其中,因此同源策略开始发挥作用。即使不是SOP,过去在该窗口中的所有内容(包括它曾经拥有的JavaScript环境)都会被销毁。

打算继续使用的任何代码或数据都需要位于您尝试使用window.opener的窗口中(或位于未被替换的另一个相关窗口中)。