2012-02-28 81 views
0

我想要一个弹出窗口通知其父窗口,有些数据可用于父。我使用的机制是dataavailable事件 - 弹出窗口创建它并将其发送给父级。父母监听这样的事件,并在事件发生时调用父母的事件处理程序。数据可用事件如何将数据从弹出窗口发送到Javascript中的父窗口?

问题是我试图在事件中实际传递一些数据。数据没有得到父母。

这里是父,测试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> 

这里是为弹出,测试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> 

测试 - parent.html和test-popup.html都会提示警报消息。两条警报消息中的时间戳都是一致的,所以我相当肯定,弹出窗口创建的事件正在被父级接收。弹出窗口显示syntheticEvent.eventType的正确值,但父项中的event.eventType未定义。

我在网上找到的例子意味着可以通过将数据放入dataavailable事件来交换数据。 我在做什么错?

在此先感谢您的回复。

回答

0

请更改event.eventTypeevent.type测试parent.html ...

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

然后你会得到你的警报正确的事件类型,是dataavailable

相关问题