簡體   English   中英

Javascript從子窗口傳遞數據到父窗口,IE bug?

[英]Javascript passing data from child window to parent window, IE bug?

我有一個彈出窗口,將數據提供給其父級。 使用window.opener.document.data = data_from_popup;

這在FF中運行良好,但在IE(6/7)中,可以在彈出窗口仍然顯示的時候訪問數據。 當我關閉彈出窗口時,看起來數據被垃圾收集。

我試圖使用clone()函數來獲取從彈出窗口接收的數據:

window.opener.add_data(data_from_popup);

在父母:

function add_data(data_from_popup) {
 data = clone(data_from_popup); 
}

它有點工作,但在某些條件下, clone()函數似乎無限遞歸。

您是否經歷過相同的事情,有沒有辦法在不使用克隆功能的情況下阻止它?

不確定您正在經歷什么,但我已經成功地在開發和生產應用程序中的IE(6,7和8)中從子彈出窗口中成功地將數據存儲在開啟器上。

你有一個URL或一些你可以提供的源代碼嗎?

在一個相關的說明...你不是試圖確定開啟者對象的類型...從彈出窗口你是嗎? - 這個領域有一些已知的IE漏洞。

更新:

這是一個簡單的例子......

<!--main window-->
<script>
  function getThing(id){
    url = 'http://mysite.com/...whatever...';
    features = 'locationbar=X,menubar=Y...';
    window['popup4'+id] = open(url, 'someNameWithoutSpaces', features);
  }
  function popupCallback(data){
    alert('I got data back! ' + data);
    document.getElementById('someID').innerHTML = '<b>' + data.label + ' (' + data.id + ')</b>';
    //close the popup (now that we have/are done with the data)
    window['popup4someID'].close();
  }
</script>
<div id="someID">{Nothing Selected Yet}</div>
<input type="button" value="Pick One" onclick="getThing('someID');"/>

<!--popup window-->
<script>
  function saveSelection(){
    //acquire data however you want/need
    var selData = {};
    selData.id = 123456;
    selData.label = 'iPod Touch (Jeff Atwood Edition)';
    //call callback on opener
    window.opener.popupCallback(selData);
  }
</script>

更新2

在測試中看來,在IE7,IE8(但不是IE6) 彈出窗口關閉后,任何參考數據都會丟失 (引用不會捕獲快照),因此如果在彈出窗口關閉后需要數據,你將會需要克隆它。

我想如果數據可以包裝在一個數組中,克隆就是小菜一碟。 只需調用它上面的.slice()來復制它, 但是......這也不起作用

我猜你需要保存你需要的值(要么形成元素,要么是DOM),因為IE看起來不會讓你在彈出窗口關閉后使用它們。 :-(

我最終做到的方式是通過json編碼我希望傳遞給彈出窗口中的父對象的復雜對象。 傳回的數據是一個簡單的字符串,可以毫無問題地復制。 在父端,json編碼的字符串被評估為Javascript對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM