首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么window.parent自引用?

为什么window.parent自引用?
EN

Stack Overflow用户
提问于 2014-08-07 18:43:24
回答 3查看 2.2K关注 0票数 3

我从文档和几个相关的StackOverflow帖子中了解到,如果没有其他父类,window.parent就会自我引用,因此不会被不定义。

我似乎找不到一个正当的理由来解释这件事。JavaScript的确有其独特之处,但这一项似乎很奇怪。

MSDN只是简单地说

如果当前窗口没有父窗口,即它占据整个浏览器窗口,则父窗口返回当前窗口的窗口对象。

MDN

如果窗口没有父窗口,则其父属性是对其自身的引用。

以及W3标准本身

如果没有父文档,窗口对象的父属性的值必须是父文档的窗口对象或文档的窗口对象

我从来没有见过其他语言会这样做,这种自我引用的设计有什么原因呢?当你点击窗口中最上面的元素时,“空”或“未定义”会不会造成更明显的情况呢?

那么,为什么?

EN

回答 3

Stack Overflow用户

发布于 2014-08-07 21:08:52

在使用iframes时,开发人员通常会自动化通过windows导航的过程。虽然它们的核心算法将由相同的基本逻辑组成,但概念方法将有所不同。

开发人员不是以父-子的方式工作,而是以这样一种方式来设计系统,即它似乎不寻找父程序,而只是为了使用正确的窗口。控制代码当前运行区域(不一定包含)的那个区域。

在这种方法中,程序在向“右”窗口询问时返回"false“或"undefined”在概念上是很奇怪的,因为必须有一个。

例如,Bob正在编程:

鲍勃:我嵌入了一个iframe!好的,让我来看看包含整个iframe的window (而不是iframe本身的window )。

鲍勃:什么?零?但是我不明白,我的iframe在运行,怎么可能没有任何窗口来控制它呢?

我只是想说,window.parent 可能不是字面上严格地从DOM中获取父文件(就像.parentElement那样),而是指向窗口,它不仅包装了脚本,而且还包装了更低级别的所有内容。

在最上面的窗口(执行脚本的位置)中,该语句可能返回相同的窗口,因为没有比它更重要的oher窗口,因此在查找上级容器时,它就变成了“正确的窗口”。

我希望我说的有道理。

票数 0
EN

Stack Overflow用户

发布于 2018-07-26 17:59:33

我想说,这有助于窗口通信。当加载第三方内容时,它可能利用window.parent.postMessage作为与其实现上下文进行通信的形式,但它可能是在没有父窗口的情况下实现的。在iframe中加载内容的html页面将有自己的窗口作为iframe windows父窗口,但是加载到类似浏览器插件(如电子webview )的内容中的内容将没有父窗口,因此postmessage将失败,实现上下文将无法侦听该事件。因此,基本上它只允许一个安全网来允许devs始终能够使用window.parent,因为他们可能不知道他们的代码是否会从window.top中运行。

票数 0
EN

Stack Overflow用户

发布于 2018-10-15 21:57:16

我想这只是个不幸的名字。该属性可以更好地命名为“parentOrCurrentWindow”。

如果您想要的是“父窗口或当前窗口”,那么能够像“父窗口”一样访问该窗口会使您的代码更短一些。如果你知道是这样的话,那就无关紧要了。你可以说得到一些窗口比空更好。

但请注意,这与语言JavaScript无关。这是关于浏览器实现的DOM模型。DOM模型可以改进为包含两个属性“parentOrCurrent”和“parentOrNull”。事实上,您可以在您自己的代码中分配这些变量,以明确您正在讨论的是哪个变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25189854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档