Javascript.RU

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

postMessage
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #22 (permalink)  
Старый 15.09.2011, 13:55
Профессор
Отправить личное сообщение для da_ff Посмотреть профиль Найти все сообщения от da_ff
 
Регистрация: 12.05.2009
Сообщений: 317

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

Зато присутствует window.opener.
__________________
Болтовня ничего не стоит. Покажите мне код. — Linus Torvalds
влад.куркин.рф
Ответить с цитированием
  #24 (permalink)  
Старый 15.09.2011, 14:02
Профессор
Отправить личное сообщение для da_ff Посмотреть профиль Найти все сообщения от da_ff
 
Регистрация: 12.05.2009
Сообщений: 317

Цитата:
Зато присутствует window.opener.
Как этим можно эмулировать postMessage?
Ответить с цитированием
  #25 (permalink)  
Старый 15.09.2011, 14: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 в 14:24.
Ответить с цитированием
  #26 (permalink)  
Старый 15.09.2011, 14:52
Профессор
Отправить личное сообщение для da_ff Посмотреть профиль Найти все сообщения от da_ff
 
Регистрация: 12.05.2009
Сообщений: 317

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск