检测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”。