Cheekysoft
Cheekysoft

Reputation: 35580

Detect iFrame embedding in Javascript

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?

Upvotes: 59

Views: 63643

Answers (5)

Pink Duck
Pink Duck

Reputation: 571

Use window.frameElement and check if it is not null and if its nodeName is "IFRAME".

Upvotes: 1

zachberry
zachberry

Reputation: 97

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 of top.location.

Upvotes: 4

Mike Grace
Mike Grace

Reputation: 16924

if (top === self) { not in a frame } else { in a frame }

From How to identify if a webpage is being loaded inside an iframe or directly into the browser window?

Upvotes: 6

Artem Barger
Artem Barger

Reputation: 41222

The predicate

(window.parent.frames.length > 0)

will tell you just what you want.

Upvotes: 12

annakata
annakata

Reputation: 75794

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:

if (window!=window.top) { /* I'm in a frame! */ }

Upvotes: 135

Related Questions