Javascript 如何检测IE中的窗口开启器

Javascript 如何检测IE中的窗口开启器,javascript,Javascript,我在堆栈上找不到任何好的答案——它们与对话框、文本编辑器和一个人使用VBScript有关 我需要在开窗器上留言。这在FF、Chrome和Opera中运行良好,但在IE8-10中,window.opener为空 我正在使用窗口。打开以显示新窗口 我甚至试过: var new_window = window.open( url, '_social', "height=600,width=600" ); if ( !new_window.opener ) { new_window.opener

我在堆栈上找不到任何好的答案——它们与对话框、文本编辑器和一个人使用VBScript有关

我需要在开窗器上留言。这在FF、Chrome和Opera中运行良好,但在IE8-10中,
window.opener
为空

我正在使用
窗口。打开
以显示新窗口

我甚至试过:

var new_window = window.open( url, '_social', "height=600,width=600" );

if ( !new_window.opener ) {
  new_window.opener = window;
}
打开的窗口仅具有如下脚本标记:

<script type="text/javascript">
var data = {
  type : 'redirect',
  destination : '<?= $destination; ?>'
};
window.opener.postMessage( JSON.stringify( data ), '*' );
window.close();
</script>

风险值数据={
键入:“重定向”,
目标:“”
};
window.opener.postMessage(JSON.stringify(数据),'*');
window.close();
我打开控制台并记录了
窗口。opener
显示为空,因此我认为这与DOM是否准备就绪无关


在使用脚本标记登录页面之前,窗口确实重定向了几次。

IE8不喜欢空格。拆下它们以使其工作:

var new_window = window.open(url,'_social',"height=600,width=600");

if (!new_window.opener) {
  new_window.opener = window;
}

实际上,这个问题可能与window.opener无关,因为IE8+只能使用postMessage与iframe通信


这在IE9或IE10中也不起作用。此外,我从来没有遇到过参数之间空格的问题。“不幸的是,这种解决方法通常是不可能的,因为同源策略规定弹出窗口和window.opener页面必须来自同一个源,才能调用彼此的脚本函数。”因此,由于我在另一个域打开窗口,opener就不存在了。好吧,是的,如果他们的postMessage实现只是对同一来源窗口访问的一种攻击——看起来是这样的。值得注意的是,如果您试图访问同一子域上的windows,至少可以使用document.domain技巧来获得访问权限。实际上,我有一个指向我自己域的iframe,它会打开指向另一个域的窗口,但逻辑是成立的。如果我使用
window.open
打开我自己的域,
opener
就在那里。说来话长,为什么这种疯狂还在继续。