何时使用window.opener / window.parent / window.top


Answers:


167
  • window.opener指被调用window.open( ... )以打开被调用窗口的窗口
  • window.parent指代<frame>或中的窗口的父级<iframe>
  • window.top指嵌套在一层或多层<iframe>子窗口中的窗口中最顶层的窗口

当它们与引用窗口的情况不相关时,它们将是null(或可能是undefined)。(“引用窗口”是指在其上下文中运行JavaScript代码的窗口。)


1
感谢@pointy的答复。我有一个主页,该页面打开时使用window.open()提交页面时打开一个孩子。现在,该子窗口打开另一个具有相同window.open()关闭自身的子窗口。现在,当我提交第二个孩子(第一个孩子不复存在)时,我想访问主页的页面元素。当第一个孩子不再存在时,第二个孩子有可能吗?
斯里拉姆

4
@Sriram:这是您需要在问题中提供的信息,以便人们知道您真正要解决的问题。
josh3736

5
@Sriram,您必须window.opener.opener在中间页消失之前抓取。
Pointy 2012年

24

我认为您需要在问题中添加一些上下文。但是,可以在以下位置找到有关这些内容的基本信息:

window.opener https://developer.mozilla.org/zh-CN/docs/Web/API/Window.opener

在打开一个新窗口作为对话框时,我主要使用window.opener,该对话框需要用户输入,并且需要将信息传递回主窗口。但是,这受原始策略的限制,因此您需要确保对话框和打开器窗口中的内容均从同一原始源加载。

window.parent https://developer.mozilla.org/zh-CN/docs/Web/API/Window.parent

在处理需要与包含它们的窗口对象进行通信的IFrame时,我主要使用了此方法。

window.top https://developer.mozilla.org/zh-CN/docs/Web/API/Window.top

这对于确保与顶级浏览器窗口进行交互很有用。您可以使用它来防止其他站点对您的网站进行格式化。

如果您在问题中添加更多细节,我可以提供其他更相关的示例。

更新: 有几种方法可以处理您的情况。
您具有以下结构:

  • 主视窗
    • 对话1
      • 对话框2由对话框1打开

当对话框1运行代码以打开对话框2后,在创建对话框2之后,让对话框1在对话框2上设置一个引用Dialog1打开器的属性。

因此,如果“ childwindow”是对话框2窗口对象的变量,而“ window”是对话框1窗口对象的变量。在打开对话框2之后,但在关闭对话框1之前,进行如下分配:

childwindow.appMainWindow = window.opener

完成上面的分配后,关闭对话框1。然后,从dialog2内部运行的代码中,您应该可以使用 window.appMainWindow来引用主窗口,窗口对象。

希望这可以帮助。


感谢@Mark的答复。我有一个主页,可以使用window.open()页面提交方式打开一个孩子。现在,该子窗口打开另一个具有相同window.open()关闭自身的子窗口。现在,当我提交第二个孩子(第一个孩子不复存在)时,我想访问主页的页面元素。当第一个孩子不再存在时,第二个孩子有可能吗?
Sriram

更新的答案。@ josh3736-我看不到该评论有什么帮助。我不建议任何人获得w3schools认证。这里的每个人都知道如何搜索和获取window.opener,window.top和window.parent的基本定义。使用上面的链接或找到新的引用,但是复制此处仅定义这些属性的信息几乎没有意义。
Mark At Ramp51'7

解释真的很有帮助@ MarkAtRamp51谢谢!
Sriram

3
该链接详细说明了w3schools的问题。关键是要避免促进或链接到w3schools或与其联系(从而增加它们的Google PageRank)作为权威的信息来源。W3S传播不良信息,部分原因是有太多人链接到该不良信息。最好是链接到更可靠的信息源,例如MDN
josh3736

5

top,parent,opener(以及window,self和iframe)都是window对象。

  1. window.opener ->返回打开或启动当前弹出窗口的窗口。
  2. window.top ->返回最上面的窗口,如果使用框架,则为框架集窗口;如果不使用框架,则与窗口或自身相同。
  3. window.parent->返回当前框架或iframe的父框架。父框架可以是框架集窗口,也可以是其他框架(如果您具有嵌套框架)。如果不使用框架,则父级与当前窗口或自身相同

1

当您处理弹出窗口时,window.opener扮演着重要角色,因为我们必须处理父页面以及子页面的字段,当我们必须在父页面上使用值时,我们可以使用window.opener或我们需要一些数据在加载时在子窗口或弹出窗口上显示,然后再次可以使用window.opener设置值

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.