Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Подскажите кто может !!!! Динамический кросс доменный iframe под IE6 (https://javascript.ru/forum/events/4418-podskazhite-kto-mozhet-dinamicheskijj-kross-domennyjj-iframe-pod-ie6.html)

B~Vladi 15.09.2011 10:44

postMessage

da_ff 15.09.2011 14:55

postMessage отсутсвует в ie6.

B~Vladi 15.09.2011 15:01

Зато присутствует window.opener.

da_ff 15.09.2011 15:02

Цитата:

Зато присутствует window.opener.
Как этим можно эмулировать postMessage?

B~Vladi 15.09.2011 15:19

Цитата:

Сообщение от da_ff
Как этим можно эмулировать postMessage?

Например, так.
Но суть в том, что родительский фрейм может менять это свойство у другого фрейма, даже если последний загружен с другого домена. Соответственно, фрейм может читать свойство своего окна.

В комментариях к приведённому коду говорится о проблемах безопасности, поэтому значением opener является объект VBScript, который из JS изменять нельзя (несоответствие типов).

Пример простейшей реализации такого объекта:
window.someNS.onMessage = function(){}; // Listener
				window.execScript(
					'Private onMessage\n' +
					'Class PostMsg\n' +
						'Public Sub postMessage(data, domain)\n' +
							'Call onMessage(data, domain)\n' +
						'End Sub\n' +
					'End Class\n' +

					'Set onMessage = window.someNS.onMessage\n' +
					'Set window.someNS.onMessage = New PostMsg'
				, 'vbscript');

				var IEWindowOpener = window.someNS.onMessage; // Присваевается для contentWindow.opener
				delete win.someNS.onMessage;

Во фрейме:
(window.opener || window.top).postMessage(msg, '*')


UPD: первый код только для IE, конечно же. Сперва стоит проверять поддержку postMessage через вызов соответствующего события.

da_ff 15.09.2011 15:52

B~Vladi,
Интересно, не встречался прежде с этой библиотекой, спасибо.


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