56

我有一个具有特定页面的应用程序——我们称之为页面 A。页面 A 有时是顶级页面,但有时也作为 iframe 嵌入到页面 B 中。所有页面都来自同一服务器,并且没有跨域问题。

我有一个在页面 A 上运行的greasemonkey 脚本。greasemonkey 脚本如何检测页面A 是否在iframe 上下文中?

4

5 回答 5

132

如果页面 A 本身有框架,则查看框架长度通常会崩溃(我知道对于这个特定实例可能不是这种情况)。更可靠和有意义的测试是:

if (window!=window.top) { /* I'm in a frame! */ }
于 2009-05-29T09:04:59.643 回答
12

谓词

(window.parent.frames.length > 0)

会告诉你你想要什么。

于 2009-05-29T08:51:32.823 回答
6
if (top === self) { not in a frame } else { in a frame }

如何识别网页是在 iframe 中加载还是直接加载到浏览器窗口中?

于 2011-08-22T15:54:55.057 回答
4

如上所述,公认的解决方案在 IE8 中不起作用。此外,检查window.parent.frames.length可能会导致跨域异常。

相反,我能够做到这一点var isInIFrame = top.location != self.location- 它在 IE8 中有效,只要您不尝试读取top.location.

于 2013-07-05T14:38:18.013 回答
0

使用window.frameElement并检查它是否不为空以及它的 nodeName 是否为“IFRAME”。

于 2012-06-11T11:06:43.010 回答