【问题标题】:When to use window.opener / window.parent / window.top何时使用 window.opener / window.parent / window.top
【发布时间】:2012-07-04 00:15:37
【问题描述】:

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

【问题讨论】:

  • 还有一个 window.self 指向同一个窗口 :)

标签: javascript window


【解决方案1】:
  • window.opener 是指调用window.open( ... ) 的窗口打开调用它的窗口
  • window.parent 指的是 <frame><iframe> 中窗口的父级
  • window.top 指嵌套在一层或多层<iframe> 子窗口中的窗口的最顶层窗口

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

【讨论】:

  • 感谢@pointy 的回复。我有一个主页,它在页面提交时使用window.open() 打开一个孩子。现在这个子窗口打开另一个具有相同window.open() 关闭自我的子窗口。现在,当我提交我的第二个孩子(第一个孩子不再存在)时,我想访问我的主页的页面元素。当第一个孩子不在时,这可能来自第二个孩子吗?
  • @Sriram:这是您需要在问题中提供的信息,以便人们知道您真正想要解决什么问题。
  • @Sriram 你必须在中间页面消失之前抓住window.opener.opener
【解决方案2】:

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

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 打开

当 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对象。

希望这会有所帮助。

【讨论】:

  • 感谢@Mark 的回复。我有一个主页,它在页面提交时使用window.open() 打开一个孩子。现在这个子窗口打开另一个具有相同window.open() 关闭自我的子窗口。现在,当我提交我的第二个孩子(第一个孩子不再存在)时,我想访问我的主页的页面元素。当第一个不再存在时,这可能来自第二个孩子吗?
  • 更新了答案。 @josh3736 - 我看不出该评论有什么帮助。我不建议任何人获得 w3schools 认证。这里大家都知道怎么google,得到window.opener、window.top、window.parent的基本定义。使用上面的链接或查找新的参考资料,但在这里复制简单定义这些属性的信息几乎没有任何意义。
  • 解释真的很有帮助@MarkAtRamp51 谢谢!
  • 该链接非常详细地解释了 w3schools 出了什么问题。关键是要避免将 w3schools 推广或链接到(从而提高 Google PageRank)作为权威信息来源。 W3S 传播不良信息,部分问题在于有太多人链接到这些不良信息。最好是链接到更可靠的信息源,例如MDN
【解决方案3】:

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

  1. window.opener -> 返回打开或启动当前弹出窗口的窗口。
  2. window.top -> 返回最顶层的窗口,如果使用框架,这是框架集窗口,如果不使用框架,则与 window 或 self 相同。
  3. window.parent -> 返回当前框架或 iframe 的父框架。如果您有嵌套框架,则父框架可能是框架集窗口或另一个框架。如果不使用框架,则 parent 与当前窗口或自身相同

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2017-03-28
      相关资源
      最近更新 更多