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

在JavaScript中何时使用window.opener / window.parent / window.top

  • window.opener引用调用window.open( ... )的窗口来打开调用它的窗口
  • window.parent指向<frame><iframe>窗口的父级
  • window.top指的是嵌套在一层或多层<iframe>子窗口中的窗口的最顶层窗口

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

我想你需要给你的问题添加一些上下文。 但是,关于这些东西的基本信息可以在这里find:

window.opener https://developer.mozilla.org/en-US/docs/Web/API/Window.opener

我主要使用window.opener打开一个新的窗口,作为一个需要用户input的对话框,需要将信息传递回主窗口。 但是,这受到源策略的限制,所以您需要确保来自对话框的内容和开启器窗口从相同的来源加载。

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

这对确保您正在与顶级浏览器窗口进行交互非常有用。 您可以使用它来防止其他网站iframing您的网站,等等。

如果你为你的问题添加更多的细节,我可以提供其他更相关的例子。

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

  • 主窗口
    • 对话1
      • Dialog 2 Opened By Dialog 1

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

因此,如果“子窗口”是对话框2窗口对象的variables,“窗口”是对话框1窗口对象的variables。 打开对话框2之后,但在closures对话框1之前,请进行类似如下的分配:

 childwindow.appMainWindow = window.opener 

在完成上面的任务之后,closures对话框1.然后,从dialog2中运行的代码,您应该可以使用window.appMainWindow引用主窗口,窗口对象。

希望这可以帮助。

顶部,父母,开瓶器(以及窗口,自我和iframe)都是窗口对象。

  1. window.opener – >返回打开或启动当前popup窗口的窗口。
  2. window.top – >返回最上面的窗口,如果你使用框架,这是框架集窗口,如果不使用框架,这是相同的窗口或自我。
  3. window.parent – >返回当前帧或iframe的父帧。 父框架可能是框架集窗口或另一个框架,如果您有嵌套的框架。 如果不使用框架,则父窗口与当前窗口或自己相同

当你处理popup窗口时,window.opener起着重要的作用,因为我们必须处理父页面的字段以及子页面,当我们必须在父页面上使用值时,我们可以使用window.opener或者我们想要一些数据在加载的时候在子窗口或popup窗口上,然后我们可以使用window.opener设置值