window.opener替代品

时间:2011-02-03 11:50:35

标签: javascript window.opener

我正在打开一个模态弹出窗口。然后我使用window.opener访问父窗口文本框和其他属性。它在Firefox中运行良好,但在IE8中运行不正常。它给出错误'window.opener is null'。如何访问在两个浏览器中都有效的子窗口中的父窗口属性。

5 个答案:

答案 0 :(得分:9)

有两种方法可以解决问题: 注意:如果使用“ showModalDialog ”,则IE不支持“ window.opener ”。

1)使用“ window.open ”代替“ window.showModalDialog

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>

答案 1 :(得分:7)

您可以将参数传递给showModalDialog函数。只需将window对象作为参数传递。

window.showModalDialog(theURL, window);

Yo可以使用dialogArguments从模态窗口访问参数。请参阅:http://msdn.microsoft.com/en-us/library/ms533723%28VS.85%29.aspx

var openerWindow = window.dialogArguments;

答案 2 :(得分:1)

禁用Internet Explorer的“保护模式”,阻止访问此对象。

这方面的步骤是:

  1. 按Alt + T显示“工具”菜单
  2. 点击“互联网选项”
  3. 选择“安全”标签
  4. 确保选中的区域包含您的网站。对于Intranet站点,它通常是“Local intranet”zone。
  5. 取消“启用保护模式”
  6. 关闭所有IE标签页并重新打开。
  7. 现在您应该能够访问window.opener对象了。

答案 3 :(得分:0)

我将采取的方法如下:

  1. 使用现有的JavaScript用户界面库,因为您不是第一个想要这样做的人,如果不这样做
  2. 创建一个名为OpenWindow的函数,该浏览器会嗅探window.opener方法
  3. 例如:

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

    如果它找到它然后使用它,否则它测试IE变体并使用它。然后它检查Safari的版本等......

答案 4 :(得分:0)

作为跨浏览器的替代方案,您可以在打开新窗口时为其提供自定义属性:

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

然后,在推荐的页面中:

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