使用top.window.open()时,Chrome和IE中的Javascript opener对象不同

使用top.window.open()时,Chrome和IE中的Javascript opener对象不同,javascript,popup,window.opener,Javascript,Popup,Window.opener,我有一个名为“MainApplication”的窗口,其中包含一个名为“Tabs”的框架。“选项卡”加载一个javascript页面,打开一个弹出窗口。当弹出窗口打开时,它使用top.window.open()。所以“MainApplication”应该打开一个新的弹出窗口,因为“Tabs”是调用它的框架,“Tabs”引用top.window对象打开弹出窗口 当我从open()获取对新打开窗口的引用时,Chrome中的opener对象将名称显示为“Tabs”。但是,当我从实际窗口内的一个框架中查

我有一个名为“MainApplication”的窗口,其中包含一个名为“Tabs”的框架。“选项卡”加载一个javascript页面,打开一个弹出窗口。当弹出窗口打开时,它使用top.window.open()。所以“MainApplication”应该打开一个新的弹出窗口,因为“Tabs”是调用它的框架,“Tabs”引用top.window对象打开弹出窗口

当我从open()获取对新打开窗口的引用时,Chrome中的opener对象将名称显示为“Tabs”。但是,当我从实际窗口内的一个框架中查看window.opener对象时,Chrome将名称显示为“MainApplication”

在IE11中,在新窗口的引用中显示的值为“Tabs”。当我在新创建的窗口中显示opener值时,IE也会将其显示为“选项卡”(即使top.window用于打开弹出窗口)

我想创建一个JSFIDLE在应用程序外部进行测试,但我不确定如何在JSFIDLE中的新弹出窗口中创建警报。任何帮助都将不胜感激

<frame name="Tabs">
// from mainWindow.js
function openPopup() {
  var newWindow = top.window.open( ..,..,..,.. );
  alert( newWindow.opener.name );
}
</frame>

//从mainWindow.js
函数openPopup(){
var newWindow=top.window.open(…,…,…);
警报(newWindow.opener.name);
}
在弹出窗口中:

<frame name="report">
// from inside the new popup, newWindow.js
function load() {
  alert( top.window.opener.name );
}
</frame>

//从新弹出窗口的内部,newWindow.js
函数加载(){
警报(top.window.opener.name);
}
我需要能够访问“标签”框架从新创建的弹出窗口,我不知道如何。“Tabs”可能并不总是打开弹出窗口的框架,我还必须使用top.window.open(),因为“MainApplication”包含所需的变量


我想我可以问一下如何访问创建新弹出窗口的opener中的子框架,但我也很好奇是否有人遇到过这个问题并找到了跨浏览器兼容的解决方案(特别是为什么新窗口引用中的值与实际窗口中的值不同)。

从弹出窗口,你只需要
opener.name
当我只使用opener.name时,我得到一个错误,说opener为null,这与window.opener.name相同,我认为这是因为它是从一个框架内调用的,所以我不必使用top.window.opener吗?好吧,如果opener在弹出窗口中为null,那么你根本无法访问其他内容。只需知道,从弹出窗口中,
opener
与框架中的
top
相同。。。