window.parent是未定义的吗?

5

我有一个单页面,没有任何iframe:

enter image description here

我需要检查该页面是否在iframe中,所以我这样做:

if (!window.parent) {...不在iframe中...}

但是似乎window.parent永远不会是undefined,并且总是引用窗口(self===parent)

为什么会这样?

窗口没有(!)父级,那么为什么它被定义了呢?

NB

  • 我知道window.window.w....是有原因的相同。但我说的是parent(!)

  • 我知道我可以检查这个条件:

if (window.self===window.parent)...

但我的问题仍然存在。


1
有趣的发现。来自微软关于IE的参考,http://msdn.microsoft.com/en-us/library/ms952669.aspx。不过没有解释为什么。 - Gavin
2个回答

6

来自MDN

如果一个窗口没有父级,那么它的 parent 属性是对其自身的引用。

这就是事实。

在他们的示例中,他们提供了一种实现您要求的方法(与您的解决方案略有不同):

if (window.parent != window.top) {
  // we're deeper than one down
}

更多参考资料:

W3

Window对象的parent属性值必须是父文档的Window对象或者文档的Window对象,如果没有父文档。


同意!我也很想知道为什么,但我相信只有少数开发人员知道真正的答案,而且他们不太可能经常出现在这里。如果我必须猜测背后的原因,我唯一能想到的合乎逻辑的原因可能是为了向后兼容,因为在某个时候这可能是有意义的。 - CodingIntrigue
我猜可能是“父级”的含义(目的)让人困惑。我认为应该是“源”,因此如果原始窗口未定义,则会期望未定义,但我猜它的意思更像是“最年长的”,其中自我引用是可能的? - Gavin

0

您可以将document.referrerwindow.location.href进行比较。

JSFiddle


不要相信 document.referrer。 - Royi Namir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接