Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   iframe.contentWindow.postMessage в Opera 9.5 (https://javascript.ru/forum/events/1881-iframe-contentwindow-postmessage-v-opera-9-5-a.html)

ivlad 30.09.2008 01:54

iframe.contentWindow.postMessage в Opera 9.5
 
Есть простой html документ, в нём iframe, в котором загружен документ с другого домена:

<html ...>
...
<body><iframe src='http://anotherdomain.com'></iframe></body>
</html>


На dev.opera.com обещают, что следующий код будет работать:

[javascript]
var iframe = document.getElementsByTagName('iframe')[0];
iframe.contentDocument.postMessage('foo');
[/javascript]

Читал, что с версии 9.5 вместо нестандартного contentDocument нужно использовать contentWindow. Пробовал и так и сяк, в обоих случая получаю в error console:

Цитата:

Error:
name: ReferenceError
message: Security error: attempted to read protected variable

То есть браузер присекает попытки доступа к свойствам объекта iframe, когда в ифрэйме документ с другого домена.

Примечательно, что в самом этом ифрэйме с другого домета отлично работает код

[javascript]
window.parent.postMessage('data', '*');
[/javascript]

Внимание, вопрос.

Как вызвать postMessage для окна ифрэйма в Opera (в firefox 3 работает, кстати).

Андрей Параничев 30.09.2008 04:05

А во фрейме listener правильно установлен? Мне кажется в случае оперы они могли спокойно не реализовать обещанное.

ivlad (not logged) 30.09.2008 13:14

Листенер, понятно, установлен. Но это и не важно. Проблема то возникает гораздо раньше: в при попытке обратиться к объекту-окну iframe.

[javascript]
alert(document.getElemenetsByTagName('iframe')[0].contentWindow)
[/javascript]

приводит к той-же ошибке

Андрей Параничев 30.09.2008 14:54

Там так хитро написано "cross-document" и нигде ни слова о "cross-domain", попробуйте с одним доменом - будет работать?


Часовой пояс GMT +3, время: 10:04.