I have an application that has a certain page -- let's call it Page A. Page A is sometimes a top-level page, but also sometimes is embedded as an iframe within page B. All pages come from the same server and there are no cross-domain issues.
I have a greasemonkey script that runs on page A. How can the greasemonkey script detect whether page A is within the iframe context or not?
From How to identify if a webpage is being loaded inside an iframe or directly into the browser window?
Looking at frame length breaks down generally if page A itself has frames (I know this might not be the case for this specific instance). The more reliable and meaningful test would be:
As stated above the accepted solution doesn't work in IE8. Additionally, checking
window.parent.frames.length
can cause a cross-domain exception.Instead I was able to achieve this with
var isInIFrame = top.location != self.location
- it works in IE8 and it doesn't cause a cross-domain violation as long as you don't attempt to read the contents oftop.location
.The predicate
will tell you just what you want.
Use
window.frameElement
and check if it is not null and if its nodeName is "IFRAME".