2011-02-03 124 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 
}