Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.04.2015, 16:18
Новичок на форуме
Отправить личное сообщение для rgba Посмотреть профиль Найти все сообщения от rgba
 
Регистрация: 19.04.2015
Сообщений: 7

Проблема с postMessage
Здравствуйте.
Суть задания: есть iframe на странице a. Нужно создать его копию на странице b, и отобразить её содержимое на странице a с помощью того же iframe.
У меня получилось написать решение для случая, когда на станице только один тег iframe. Для многих так и не удалось заставить код работать.

Код 1:
window.onload = function(){
	function test() {
		var myFrame = document.getElementsByTagName('iframe');
		for (var i = 0; i < myFrame.length; i++) {
		
			var myFrameContent = myFrame[i].contentWindow || myFrame[i].contentDocument;
			var arr = [
				myFrame[i].src,
				myFrame[i].width,
				myFrame[i].height
			];
		
			myFrame[i].src = 'http://test2.ru';
			myFrame[i].onload = function(){
				myFrameContent.postMessage(JSON.stringify(arr), 'http://test2.ru');
			};
		};
	};
	test();
}

Тут проблема в том, что когда после смены адреса myFrame[i].src = 'http://test2.ru' фрейм загружается и срабатывает событие onload , то счетчик i уже на последней итерации, а данные массива соотвествуют только последнему фрейму.

Изменил код к такому виду:
window.onload = function(){
	var postIframe = function(myFrameContent,arr) {
	  myFrameContent.postMessage(arr,'http://test2.ru');
	};
	function test() {
	  var myFrame = document.getElementsByTagName('iframe');
	  for (var i = 0; i < myFrame.length; i++) {
		var myFrameContent = myFrame[i].contentWindow || myFrame[i].contentDocument;
		var arr = [
		  myFrame[i].src,
		  myFrame[i].width,
		  myFrame[i].height
		];
		myFrame[i].src = 'http://test2.ru';
		myFrame[i].onload = postIframe(myFrameContent,arr);
	  };
	};
	test();
};

С этим кодом скрипт получает все необходимые данные, но на странице b ничего не создается, соответственно на странице a ничего не выводится.

Скрипт для приема на странице b:
function listener(event){
	var myFrame = document.createElement("IFRAME"),
	parseData = JSON.parse(event.data);
	myFrame.src = parseData[0];
	myFrame.width = parseData[1];
	myFrame.height = parseData[2];
	myFrame.scrolling = "no";
	myFrame.frameBorder = "0";
	document.body.appendChild(myFrame);
}
window.addEventListener ? window.addEventListener("message", listener,false) : window.attachEvent("onmessage", listener);

Как мне заставить все это заработать?
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с радио кнопками px379 Общие вопросы Javascript 8 29.07.2013 09:30
postMessage между вкладками cyber Events/DOM/Window 3 06.10.2012 02:30
Проблема с Popup окном vovuslik jQuery 5 12.06.2010 16:12
Проблема с дизайном после отправки xmlhttprequest, Проблема с дизайном после отправки cyberx AJAX и COMET 3 01.05.2010 17:07
Проблема спама lliberty AJAX и COMET 1 12.03.2009 16:47