我从文档和几个相关的StackOverflow帖子中了解到,如果没有其他父类,window.parent就会自我引用,因此不会被不定义。
我似乎找不到一个正当的理由来解释这件事。JavaScript的确有其独特之处,但这一项似乎很奇怪。
MSDN只是简单地说
如果当前窗口没有父窗口,即它占据整个浏览器窗口,则父窗口返回当前窗口的窗口对象。
MDN态
如果窗口没有父窗口,则其父属性是对其自身的引用。
以及W3标准本身
如果没有父文档,窗口对象的父属性的值必须是父文档的窗口对象或文档的窗口对象
我从来没有见过其他语言会这样做,这种自我引用的设计有什么原因呢?当你点击窗口中最上面的元素时,“空”或“未定义”会不会造成更明显的情况呢?
那么,为什么?
发布于 2014-08-07 21:08:52
在使用iframes时,开发人员通常会自动化通过windows导航的过程。虽然它们的核心算法将由相同的基本逻辑组成,但概念方法将有所不同。
开发人员不是以父-子的方式工作,而是以这样一种方式来设计系统,即它似乎不寻找父程序,而只是为了使用正确的窗口。控制代码当前运行区域(不一定包含)的那个区域。
在这种方法中,程序在向“右”窗口询问时返回"false“或"undefined”在概念上是很奇怪的,因为必须有一个。
例如,Bob正在编程:
鲍勃:我嵌入了一个iframe!好的,让我来看看包含整个iframe的window (而不是iframe本身的window )。
鲍勃:什么?零?但是我不明白,我的iframe在运行,怎么可能没有任何窗口来控制它呢?
我只是想说,window.parent 可能不是字面上严格地从DOM中获取父文件(就像.parentElement那样),而是指向窗口,它不仅包装了脚本,而且还包装了更低级别的所有内容。
在最上面的窗口(执行脚本的位置)中,该语句可能返回相同的窗口,因为没有比它更重要的oher窗口,因此在查找上级容器时,它就变成了“正确的窗口”。
我希望我说的有道理。
发布于 2018-07-26 17:59:33
我想说,这有助于窗口通信。当加载第三方内容时,它可能利用window.parent.postMessage作为与其实现上下文进行通信的形式,但它可能是在没有父窗口的情况下实现的。在iframe中加载内容的html页面将有自己的窗口作为iframe windows父窗口,但是加载到类似浏览器插件(如电子webview )的内容中的内容将没有父窗口,因此postmessage将失败,实现上下文将无法侦听该事件。因此,基本上它只允许一个安全网来允许devs始终能够使用window.parent,因为他们可能不知道他们的代码是否会从window.top中运行。
发布于 2018-10-15 21:57:16
我想这只是个不幸的名字。该属性可以更好地命名为“parentOrCurrentWindow”。
如果您想要的是“父窗口或当前窗口”,那么能够像“父窗口”一样访问该窗口会使您的代码更短一些。如果你知道是这样的话,那就无关紧要了。你可以说得到一些窗口比空更好。
但请注意,这与语言JavaScript无关。这是关于浏览器实现的DOM模型。DOM模型可以改进为包含两个属性“parentOrCurrent”和“parentOrNull”。事实上,您可以在您自己的代码中分配这些变量,以明确您正在讨论的是哪个变量。
https://stackoverflow.com/questions/25189854
复制相似问题