检测JavaScript中embedded的iFrame

我有一个具有特定页面的应用程序 – 我们称之为页面A.页面A有时是顶层页面,但有时也被embedded为页面B中的iframe。所有页面来自同一个服务器,并且没有跨域问题。

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

一般来说,如果页面A本身有框架(我知道这可能不是这种情况)。 更可靠和有意义的testing将是:

if (window!=window.top) { /* I'm in a frame! */ } 

谓词

 (window.parent.frames.length > 0) 

会告诉你你想要什么。

 if (top === self) { not in a frame } else { in a frame } 

从如何确定一个网页是在一个iframe中加载还是直接加载到浏览器窗口?

如上所述,接受的解决scheme在IE8中不起作用。 另外,检查window.parent.frames.length会导致跨域exception。

相反,我能够实现这个与var isInIFrame = top.location != self.location – 它在IE8中工作,它不会导致跨域违反,只要你不试图读取top.location的内容top.location

使用window.frameElement并检查它是否为空,如果它的nodeName是“IFRAME”。