2012-02-28 85 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

相關問題