在Internet Explorer上未定义window.opener

Shu*_*ubh 4 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(); 
    }
}
Run Code Online (Sandbox Code Playgroud)

opener是未定义的.难道我做错了什么?

我试图parent.window.opener/ window.top/ window.top.document.body等,但它并没有帮助.它在其他浏览器中工作正常.

我已经看到了Window Opener Alternative的问题,但我无法立即改变打开我的弹出窗口showModalDialog.可能,这将是最后的选择.

小智 19

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

要在IE中找到此选项:

  • 转到Internet选项
  • 安全选项卡
  • 单击"Internet"或"本地Intranet"图标
  • 选中或取消选中"启用保护模式"选项
  • 重启IE


And*_*rei 5

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

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

可以在这里的文档中找到更多详细信息:http : //msdn.microsoft.com/zh-cn/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;
Run Code Online (Sandbox Code Playgroud)