2011-02-03 127 views
19

我打開一個模式彈出窗口。然後我使用window.opener訪問父窗口文本框和其他屬性。它在Firefox中工作正常,但不在IE8中。它給出錯誤'window.opener爲空'。如何訪問在兩個瀏覽器中工作的子窗口中的父窗口屬性。window.opener替代品

+0

你試過window.parent.opener? – 2011-02-03 11:52:34

+0

我嘗試了window.parent.opener,但我無法訪問父文檔對象。我將parent.document作爲參數傳遞,並在popup中訪問parent.document作爲window.dialogArguments.parentDocumentObj,其中parentDocumentObj是包含文檔的變量的名稱。 – dmay 2011-02-16 12:04:23

回答

0

我會採取的方法是:

  1. 使用現有的JavaScript UI庫,因爲你不是第一人,曾經想這樣做,做不到這一點
  2. 創建一個名爲OpenWindow的函數,即瀏覽器嗅探window.opener方法

例如:

if(window.opener == undefined) { 
    //probably not Firefox... 
} 

如果它發現它然後使用它,否則它測試IE變體並使用它。然後檢查Safari瀏覽器的版本,等等。

8

有兩種方法來解決這個問題: 注:「window.opener」不支持IE,如果使用了「的showModalDialog」。

1)替代 「window.showModalDialog」 的使用 「window.open

2)如果您想使用 「window.showModalDialog」 然後執行以下操作:

<script language="javascript" type="text/javascript"> 
    function YourFunction() 
    { 
     var opener = null; 

     if (window.dialogArguments) // Internet Explorer supports window.dialogArguments 
     { 
      opener = window.dialogArguments; 
     } 
     else // Firefox, Safari, Google Chrome and Opera supports window.opener 
     {   
      if (window.opener) 
      { 
       opener = window.opener; 
      } 
     }  
     // write you code and refer "opener" 
     window.close(); 
    } 
</script> 
2

禁用Internet Explorer的「保護模式」,它禁止訪問此對象。

這樣做的步驟是:

  1. 按Alt + T以顯示工具菜單
  2. 點擊 「Internet選項」
  3. 選擇 「安全」 選項卡
  4. 確保區域選擇含有您的網站。對於Intranet站點,通常是「本地Intranet」區域。
  5. 取消「啓用保護模式」
  6. 關閉所有IE選項卡和窗口並重新打開。

現在你應該可以訪問window.opener對象。

0

作爲一個跨瀏覽器的選擇,你可以在你打開它給出一個自定義屬性的新窗口:

var popup = window.open(...); 
popup.isPopup = true; 

然後,在被稱爲頁:

if (window.isPopup) { 
    // Do something 
} 
else { 
    // Not in a popup 
}