2012-06-18 25 views
0

傳送附加數據由客戶所請求的工作流程是這樣的:window.opener.dispatchEvent不會在Firefox

登記表上的用戶點擊一個按鈕,打開另一個窗口:

$ -> 
    $("a.popup").on 'click', (e) -> 
    e.preventDefault() 
    newWindowCenter($(this).attr("href"), $(this).attr("data_width"), $(this).attr("data_height"), "authPopup") 

其中

newWindowCenter = (url, width, height, name) -> 
    left = (screen.width/2) - (parseInt(width)/2); 
    top = (screen.height/2) - (parseInt(height)/2); 
    window.addEventListener("dataAvailable", transferAccountData, false) 
    window.open(url, name, 
"menubar=no,toolbar=no,status=no,width="+width+",height="+height+",alwaysRaise=yes,toolbar=no,left="+left+",top="+top) 

在這個新的窗口,他得到了一些數據,使用其中他證實通過點擊一個按鈕,這樣:

$(".confirm_data_usage").on 'click', (e) -> 
    e.preventDefault() 
    if (window.opener) 

     accountData= {...} 

     data = {...} #collected in opened window 

     approveDataTransfer = document.createEvent("Events") 

     approveDataTransfer.dataTransfer = data   

     approveDataTransfer.initEvent("dataAvailable", true, false) 
     approveDataTransfer.eventType = "data available" 

     window.opener.dispatchEvent(approveDataTransfer) 

    window.close() 

所以點擊「confirm_data_usage」按鈕插入該數據的功能在揭幕戰窗口發射

transferAccountData = (event) -> 
    data = event.dataTransfer 
    ... 

事情經過是:它在Chrome和Opera的工作,但在Firefox event.dataTransfer是不確定的。任何人都看到一個明顯的錯誤/知道Firefox中的某些特定事件阻止事件傳輸數據?也許有另一種方式?問題可能與approveDataTransfer事件上的isTrusted屬性有關?

+0

我通常在'window'定義一個函數,然後直接調用它('window.opener.that_function(...)')。該功能在完成其工作後也可以從'window'中移除。 –

+0

好吧,將函數更改爲@transferAccountData =(data) - >並直接調用window.opener.transferAccountData(data)。咖啡的問題是我總是忘記@。 我想,你可以給你答案作爲答案,所以我可以,我不知道,接受它。 – Nox

回答

0

我不知道發生了什麼事情與你的活動數據,但我通常處理這種事情的方法是將功能附加到window

window.transferAccountData = (data) -> 
    # Whatever needs to be done goes here... 

然後在新的窗口中,可以直接調用該函數通過window.opener

window.opener.transferAccountData(data) 

我還沒有與任何瀏覽器在這種方法的任何問題。