I have developed an application that has a list of items in one frame; when one clicks on an item it does something in another frame (loads an image).
This used to work fine in all browsers, including Chrome 3; now it still works fine in Firefox but in recent versions of Chrome (I believe since 4) it throws this error:
Unsafe JavaScript attempt to access frame with URL (...) from frame with URL (...). Domains, protocols and ports must match.
This is obviously a security "feature" but is it possible to get around it?
Here is a simple test:
index.html:
<html>
<frameset cols="50%,50%">
<frame src="left.html" name="left"/>
<frame src="right.html" name="right"/>
</frameset>
</html>
left.html:
<html>
<body>
<a href="javascript:parent.right.test('hello');">click me</a>
</body>
</html>
right.html:
<html>
<body>
<script>
function test(msg) {
alert(msg);
}
</script>
</body>
</html>
The above works in Firefox 3.6 and Chrome 3 but in Chrome 5 it throws the above error...
Edit:
I tried your test pages, and they work fine with Chrome 4.1.249.1045 on Windows (and Firefox 3.6.3, and IE7 [after fixing the issue below]). So I'm with Pekka (as usual): I think the problem must lie elsewhere.
It wasn't working in IE7 and it took me forever to figure out why not: You need to give either rows
or cols
on the frameset
tag, otherwise IE only loads the one frame. (The validator would have told me that if I'd asked it.)