我有一个具有特定页面的应用程序——我们称之为页面 A。页面 A 有时是顶级页面,但有时也作为 iframe 嵌入页面 B 中。所有页面都来自同一服务器,并且没有跨域问题。
我有一个在页面 A 上运行的油脂猴脚本。油脂猴脚本如何检测页面 A 是否在 iframe 上下文中?
我有一个具有特定页面的应用程序——我们称之为页面 A。页面 A 有时是顶级页面,但有时也作为 iframe 嵌入页面 B 中。所有页面都来自同一服务器,并且没有跨域问题。
我有一个在页面 A 上运行的油脂猴脚本。油脂猴脚本如何检测页面 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
并检查它是否不为 null 以及它的 nodeName 是否为“IFRAME”。