Я пытаюсь, чтобы всплывающее окно уведомляло его родительское окно, что некоторые данные доступны для родителя. Механизм, который я использую, - это событие 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. Что я делаю не так?
Заранее спасибо за ваши ответы.