Как события с доступными данными могут отправлять данные из всплывающего окна в родительское окно в Javascript? - PullRequest
0 голосов
/ 28 февраля 2012

Я пытаюсь, чтобы всплывающее окно уведомляло его родительское окно, что некоторые данные доступны для родителя. Механизм, который я использую, - это событие dataavailable - всплывающее окно создает его и отправляет его родителю. Родитель прослушивает такое событие, и при возникновении события вызывается обработчик события родителя.

Проблема в том, что я пытаюсь передать некоторые данные в событии. Данные не попадают к родителю.

Вот исходный код для родителя, test-parent.html:

<html>
<head>
<title>Test parent</title>
<script type="text/javascript">
function openPopup()
{
  window.open("test-popup.html", "popup", ['width=400', 'height=200']);
  window.addEventListener("dataavailable", onDataAvailableEvent, false);
}   

function onDataAvailableEvent(event)
{   
  alert("In onDataAvailableEvent(), " +
          "event.timeStamp '" + event.timeStamp + 
            "', event.eventType '" + event.eventType + "'");
}
</script>
</head>

<body> 
<input type="button" value="Open test-popup.html" onclick="openPopup()" />
</body>
</html>

А вот исходный код всплывающего окна test-popup.html:

<html>
<head>
<title>Test popup</title>
<script type="text/javascript">
function onButtonClick()
{   
  var syntheticEvent = document.createEvent("Events");
  syntheticEvent.initEvent("dataavailable", true, false);
  syntheticEvent.eventType = "test-popup.html finished";
  window.opener.dispatchEvent(syntheticEvent);

  alert("Dispatched dataavailable event, " + 
          "syntheticEvent.timeStamp '" + syntheticEvent.timeStamp + 
            "', syntheticEvent.eventType '" + syntheticEvent.eventType + "'"");
}   
</script>
</head>  

<body>
<input type="button" value="Create dataavailable event" onclick="onButtonClick()" />
</body>
</html>

test-parent.html и test-popup.html выдают предупреждающие сообщения. Временные метки в обоих сообщениях оповещения совпадают, поэтому я вполне уверен, что событие, созданное всплывающим окном, принимается родителем. Во всплывающем окне отображается правильное значение дляeticEvent.eventType, но в родительском элементе event.eventType не определено.

Примеры, которые я нашел в сети, подразумевают, что можно обмениваться данными, помещая их в событие dataavailable. Что я делаю не так?

Заранее спасибо за ваши ответы.

1 Ответ

0 голосов
/ 28 февраля 2012

Пожалуйста, измените event.eventType на event.type в test-parent.html ...

function onDataAvailableEvent(event)
{   
  alert("In onDataAvailableEvent(), " +
          "event.timeStamp '" + event.timeStamp + 
            "', event.eventType '" + event.type + "'");
}

Тогда вы получите правильный тип события в вашем предупреждении, которое dataavailable

...