【发布时间】:2012-07-04 00:15:37
【问题描述】:
在 JavaScript 中何时使用 window.opener / window.parent / window.top ?
【问题讨论】:
-
还有一个 window.self 指向同一个窗口 :)
标签: javascript window
在 JavaScript 中何时使用 window.opener / window.parent / window.top ?
【问题讨论】:
标签: javascript window
window.opener 是指调用window.open( ... ) 的窗口打开调用它的窗口window.parent 指的是 <frame> 或 <iframe> 中窗口的父级
window.top 指嵌套在一层或多层<iframe> 子窗口中的窗口的最顶层窗口当它们与引用窗口的情况无关时,它们将是 null(或者可能是 undefined)。 (“引用窗口”是指 JavaScript 代码在其上下文中运行的窗口。)
【讨论】:
window.open() 打开一个孩子。现在这个子窗口打开另一个具有相同window.open() 关闭自我的子窗口。现在,当我提交我的第二个孩子(第一个孩子不再存在)时,我想访问我的主页的页面元素。当第一个孩子不在时,这可能来自第二个孩子吗?
window.opener.opener。
我认为您需要为您的问题添加一些上下文。但是,可以在此处找到有关这些内容的基本信息:
window.opener
https://developer.mozilla.org/en-US/docs/Web/API/Window.opener
我主要在打开一个新窗口时使用 window.opener,该窗口充当需要用户输入的对话框,并且需要将信息传递回主窗口。但是,这受到源策略的限制,因此您需要确保对话框和打开器窗口中的内容都是从同一源加载的。
window.parent
https://developer.mozilla.org/en-US/docs/Web/API/Window.parent
我主要在处理需要与包含它们的窗口对象通信的 IFrame 时使用它。
window.top
https://developer.mozilla.org/en-US/docs/Web/API/Window.top
这对于确保您与顶级浏览器窗口进行交互很有用。除其他外,您可以使用它来防止其他网站对您的网站进行 iframe。
如果您在问题中添加更多细节,我可以提供其他更相关的示例。
更新:
有几种方法可以处理您的情况。
你有以下结构:
当 Dialog 1 运行代码以打开 Dialog 2 时,在创建 Dialog 2 后,让对话框 1 在 Dialog 2 上设置一个引用 Dialog1 打开器的属性。
因此,如果“childwindow”是对话框 2 窗口对象的变量,而“window”是对话框 1 窗口对象的变量。在打开对话框 2 之后,但在关闭对话框 1 之前,进行类似于以下的分配:
childwindow.appMainWindow = window.opener
完成上述分配后,关闭对话框 1。
然后从 dialog2 中运行的代码中,您应该可以使用
window.appMainWindow引用主窗口,window对象。
希望这会有所帮助。
【讨论】:
window.open() 打开一个孩子。现在这个子窗口打开另一个具有相同window.open() 关闭自我的子窗口。现在,当我提交我的第二个孩子(第一个孩子不再存在)时,我想访问我的主页的页面元素。当第一个不再存在时,这可能来自第二个孩子吗?
top、parent、opener(以及 window、self 和 iframe)都是 window 对象。
window.opener -> 返回打开或启动当前弹出窗口的窗口。window.top -> 返回最顶层的窗口,如果使用框架,这是框架集窗口,如果不使用框架,则与 window 或 self 相同。window.parent -> 返回当前框架或 iframe 的父框架。如果您有嵌套框架,则父框架可能是框架集窗口或另一个框架。如果不使用框架,则 parent 与当前窗口或自身相同【讨论】:
当你在处理弹出窗口时 window.opener 起着重要的作用,因为我们必须处理父页面和子页面的字段,当我们必须在父页面上使用值时,我们可以使用 window.opener 或者我们在加载时想要子窗口或弹出窗口上的一些数据然后我们可以再次使用 window.opener 设置值
【讨论】: