Показать сообщение отдельно
  #25 (permalink)  
Старый 15.09.2011, 15:19
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Сообщение от 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 через вызов соответствующего события.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф

Последний раз редактировалось B~Vladi, 15.09.2011 в 15:24.
Ответить с цитированием