在Javascript中检测iFrame嵌入

时间:2009-05-29 08:47:31

标签: javascript iframe greasemonkey

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

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

5 个答案:

答案 0 :(得分:123)

如果页面A本身有框架(我知道这可能不是这个特定实例的情况),那么查看帧长度通常会中断。更可靠和有意义的测试将是:

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

答案 1 :(得分:11)

谓词

(window.parent.frames.length > 0)

会告诉你你想要什么。

答案 2 :(得分:6)

答案 3 :(得分:4)

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

相反,我能够通过var isInIFrame = top.location != self.location实现这一点 - 它可以在IE8中运行,只要您不尝试读取top.location的内容,它就不会导致跨域违规

答案 4 :(得分:0)

使用window.frameElement并检查它是否为空,并且其nodeName是否为“IFRAME”。