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

IT技术 javascript window
2021-03-12 23:28:56

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

4个回答
  • window.opener指调用window.open( ... )打开调用它的窗口的窗口
  • window.parent指一个窗口的父窗口<frame><iframe>
  • window.top指嵌套在一层或多层<iframe>窗口中的窗口的最顶层窗口

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

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

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

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 运行代码以打开对话框 2 时,在创建对话框 2 后,让对话框 1 在对话框 2 上设置一个引用对话框 1 开启程序的属性。

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

childwindow.appMainWindow = window.opener

完成上面的赋值后,关闭dialog 1。然后从dialog2里面运行的代码,你应该可以使用 window.appMainWindow来引用主窗口,window对象。

希望这可以帮助。

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

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

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

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