我有一个具有特定页面的应用程序——我们称之为页面 A。页面 A 有时是顶级页面,但有时也作为 iframe 嵌入到页面 B 中。所有页面都来自同一服务器,并且没有跨域问题。
我有一个在页面 A 上运行的greasemonkey 脚本。greasemonkey 脚本如何检测页面A 是否在iframe 上下文中?
我有一个具有特定页面的应用程序——我们称之为页面 A。页面 A 有时是顶级页面,但有时也作为 iframe 嵌入到页面 B 中。所有页面都来自同一服务器,并且没有跨域问题。
我有一个在页面 A 上运行的greasemonkey 脚本。greasemonkey 脚本如何检测页面A 是否在iframe 上下文中?
如果页面 A 本身有框架,则查看框架长度通常会崩溃(我知道对于这个特定实例可能不是这种情况)。更可靠和有意义的测试是:
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 }
如上所述,公认的解决方案在 IE8 中不起作用。此外,检查window.parent.frames.length
可能会导致跨域异常。
相反,我能够做到这一点var isInIFrame = top.location != self.location
- 它在 IE8 中有效,只要您不尝试读取top.location
.
使用window.frameElement
并检查它是否不为空以及它的 nodeName 是否为“IFRAME”。