views:

98

answers:

4

How is it possible for a script within an <iframe> to have any notion of the page containing it? Can a script in the frame access any context outside of it? What about cross-domain?

Up until now I believed an <iframe> is completely agnostic to the containing page, but I have seen an example which contradicts this belief.

What exactly can and can't be done from within an <iframe> with respect to the containing page?

+6  A: 

if the content of the iframe and its parent have the same domain, you can access the parent page from the iframe by using parent.document.getElement... - but you can't do this cross-domain.

oezi
just for reference, `top` is the top document, `self` is the current document and `parent` is the document above the current one.
David Morrissey
Learn something new every day :)
Olly Hodgson
+2  A: 

Generally, you can't communicate between the two DOMs across domains. However, there is a way to pass messages between the two using the hash portion of the iframe's url. For iframes on the same domain, see oezi's answer.

This might be of some help, and there's plenty of other questions on the topic around here.

Olly Hodgson
interesting article, strange that it dismisses html5's postmessage as having not enough support yet as safari, chrome, firefox, opera and even MSIE8 support it. with the jquery postmessage plugin (which uses some of the techniques used in the article you link) it becomes entirely cross-browser.
futtta
I think that's understandable - it was written in March 2008 :) That jQuery plugin sounds very interesting though.
Olly Hodgson
A: 

Check out this article, everthing you need to know about xss with iframes

http://softwareas.com/cross-domain-communication-with-iframes

Ivo
A: 

If they aren't on the same domain, you can communicate some information through the url fragment/hash. Here is a good example of that process...

http://www.tagneto.org/blogcode/xframe/ui.html

John Himmelman