Javascript 如何检测IE中的窗口开启器
我在堆栈上找不到任何好的答案——它们与对话框、文本编辑器和一个人使用VBScript有关 我需要在开窗器上留言。这在FF、Chrome和Opera中运行良好,但在IE8-10中,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
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
就在那里。说来话长,为什么这种疯狂还在继续。