在Internet Explorer上未定义window.opener

时间:2014-05-09 10:15:21

标签: javascript jquery

当我尝试从弹出窗口访问“父窗口”的元素时,我将window.opener视为未定义。

var opener = window.opener;
if(opener) 
{
    console.log("opener element found");
    var elem = opener.$('.my-parent-element');
    if (elem) {
        console.log("parent element found");
        elem.show(); 
    }
}

此处opener未定义。难道我做错了什么?

我已尝试parent.window.opener / window.top / window.top.document.body等,但它也无济于事。它在其他浏览器中运行良好。

我看到问题Window Opener Alternative,但我无法立即更改showModalDialog打开弹出框。可能,这将是最后的选择。

2 个答案:

答案 0 :(得分:18)

我遇到了同样的问题,这是由于Internet Explorer安全选项, 特别是因为我的弹出窗口是外部网站(Internet区域),而父级是内部页面(Intranet区域)。 “保护模式”仅针对“Internet”激活。 我为“本地内联网”激活它,现在它可以工作。

要在IE中找到此选项:

  • 转到“Internet选项”
  • 安全标签
  • 点击“互联网”或“本地内部网”图标
  • 选中或取消选中“启用保护模式”选项
  • 重新启动IE

答案 1 :(得分:5)

如果使用的浏览器是IE,您可以使用showModalDialog函数并将参数传递给它。只需将window对象作为参数传递。

之后,您可以使用dialogArguments从模态窗口访问参数。

更多详情可在此处的文档中找到:http://msdn.microsoft.com/en-us/library/ms533723%28VS.85%29.aspx

检索示例:

window.showModalDialog(theURL, window);

//in the modal dialog you can use this to retrieve the window.
var openerWindow = window.dialogArguments;