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