我有一个具有特定页面的应用程序 - 让我们称之为页面A.页面A有时是顶级页面,但有时也会嵌入到页面B中的iframe中。所有页面都来自同一台服务器并且没有跨域问题。
我有一个在页面A上运行的greasemonkey脚本.illipmonkey脚本如何检测页面A是否在iframe上下文中?
答案 0 :(得分:123)
如果页面A本身有框架(我知道这可能不是这个特定实例的情况),那么查看帧长度通常会中断。更可靠和有意义的测试将是:
if (window!=window.top) { /* I'm in a frame! */ }
答案 1 :(得分:11)
谓词
(window.parent.frames.length > 0)
会告诉你你想要什么。
答案 2 :(得分:6)
if (top === self) { not in a frame } else { in a frame }
来自How to identify if a webpage is being loaded inside an iframe or directly into the browser window?
答案 3 :(得分:4)
如上所述,已接受的解决方案在IE8中不起作用。此外,检查window.parent.frames.length
可能会导致跨域异常。
相反,我能够通过var isInIFrame = top.location != self.location
实现这一点 - 它可以在IE8中运行,只要您不尝试读取top.location
的内容,它就不会导致跨域违规
答案 4 :(得分:0)
使用window.frameElement
并检查它是否为空,并且其nodeName是否为“IFRAME”。