在Internet Explorer浏览器上,window.opener未定义

4

当我试图从一个弹出窗口访问父窗口的元素时,window.opener 的值为 undefined。

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打开我的弹出窗口。这可能是最后的选择。


打开者是同一主机吗?它是否已经重定向? - Timmetje
我认为这与IE安全区有关:http://stackoverflow.com/questions/15822885/window-opener-null-on-same-domain-in-ie - Timmetje
这听起来像是我的问题。但似乎没有解决方案?是吗? - Shubh
很不幸,像许多IE问题一样。 - Timmetje
2个回答

20

我曾经有同样的问题,原因是因为Internet Explorer安全选项,特别是我的弹出窗口要去一个外部网站(互联网区域),而父页面是一个内部页面(Intranet区域)。 "受保护模式"仅对"互联网"生效。我将其激活到"本地Intranet",现在它可以正常工作了。

在IE中找到此选项:

  • 进入"Internet选项"
  • 选择"安全"选项卡
  • 点击 "Internet" 或 "Local intranet" 图标
  • 勾选或取消勾选 "启用受保护模式"选项
  • 重新启动 IE

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;

抱歉晚了。正如我之前所说,使用showModalDialog实现将是最后的选择(因此花费了一些时间)。我修改了代码并运行了一下。一切都很好。谢谢。 - Shubh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接