在JavaScript时使用window.opener
/ window.parent
/ window.top
?
何时使用 window.opener / window.parent / window.top
window.opener
指调用window.open( ... )
打开调用它的窗口的窗口window.parent
指一个窗口的父窗口<frame>
或<iframe>
window.top
指嵌套在一层或多层<iframe>
子窗口中的窗口的最顶层窗口
当它们与参考窗口的情况无关时,它们将是null
(或可能undefined
)。(“引用窗口”是指 JavaScript 代码在其上下文中运行的窗口。)
我认为您需要为您的问题添加一些上下文。但是,可以在此处找到有关这些内容的基本信息:
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,等等。
如果您在问题中添加更多细节,我可以提供其他更相关的示例。
更新:
有几种方法可以处理您的情况。
您具有以下结构:
- 主窗口
- 对话 1
- 对话框 2 由对话框 1 打开
- 对话 1
当对话框 1 运行代码以打开对话框 2 时,在创建对话框 2 后,让对话框 1 在对话框 2 上设置一个引用对话框 1 开启程序的属性。
因此,如果“childwindow”是对话框 2 窗口对象的变量,而“窗口”是对话框 1 窗口对象的变量。在打开对话框 2 之后,但在关闭对话框 1 之前,进行类似于以下的分配:
childwindow.appMainWindow = window.opener
完成上面的赋值后,关闭dialog 1。然后从dialog2里面运行的代码,你应该可以使用
window.appMainWindow
来引用主窗口,window对象。
希望这可以帮助。
top、parent、opener(以及 window、self 和 iframe)都是窗口对象。
window.opener
-> 返回打开或启动当前弹出窗口的窗口。window.top
-> 返回最上面的窗口,如果你使用frames,这是frameset窗口,如果不使用frames,这和window或self一样。window.parent
-> 返回当前框架或 iframe 的父框架。如果您有嵌套框架,父框架可能是框架集窗口或另一个框架。如果不使用框架,parent 与当前窗口或 self 相同
当你处理弹出窗口时 window.opener 起着重要的作用,因为我们必须处理父页面和子页面的字段,当我们必须使用父页面上的值时,我们可以使用 window.opener 或者我们想要一些数据在加载时在子窗口或弹出窗口上,然后我们可以再次使用 window.opener 设置值