views:

314

answers:

1

Hi,

I have need to communicate between two iframes of the same domain, which live inside a parent page on a different domain that I have no control over.

This is a Facebook app and the basic layout is this

apps.facebook.com/myapp
L iframe1 (src='mysite.com/foo')
L iframe2 (src='mysite.com/bar')

I need frame1 to talk to frame2, but in Opera I can't access window.parent.frames['frame2'] to do the usual cross-domain methods (updating location.hash for example)

Is there an alternate way to accomplish this in Opera?

Thanks for your help in advance

A: 

Generally no. Same Origin Policy denies you the possibility of communicating upwards to the parent, which would be necessary to then step downwards to the other frame. This is true in any browser.

If the parent document has given your frame-to-be-contacted a unique name, there is a limited form of communication possible with it by getting the user to click a link with href="otherurl#message" target="name", which will navigate the target frame by changing the hash without reloading the page, as long as the URL matches exactly. In Mozilla you can also do this with a form target, allowing you to script its submission (since link clicking cannot be automated), but not in Opera. Probably not much use... don't know if FB gives you a frame target name in any case.

You can make a communication channel between scripts in the same domain by using cookies(*): one script writes a session cookie, the other script polls for changes to document.cookie to find messages in it. But it's super-ugly and requires some annoying work to control signalling which messages are meant for whom when there are multiple documents open simultaneously. And there are further limitations for cookies in third-party frames (you will probably need to write a P3P policy to get IE to co-operate).

(*: or, presumably, HTML5 web storage, where available.)

bobince