如何绕过window.opener的跨域安全性?

11 浏览
0 Comments

如何绕过window.opener的跨域安全性?

我刚刚发现,如果在IE中通过window.open打开的窗口的新URL是跨域的,那么window.opener是不可用的。这种情况会发生在窗口从我的域名开始,离开我的域名,然后返回到我的域名。我正在尝试在弹出窗口中进行社交注册(Facebook、Google等)。完成后,它应该关闭新窗口并重定向到原来的窗口。

我知道Soundcloud可以实现这一点,但我不知道他们是如何做到的。我看到URL从他们自己的网站变成了Facebook的,然后关闭了窗口。

从第三方网站重定向回来后,我运行以下代码:

var data = {
  type : 'complete',
  destination : ''
};
if ( window.opener ) {
  window.opener.postMessage( JSON.stringify( data ), '*' );
  window.close();
}
else {
  alert( "无法找到窗口" );
}

在IE中弹出警告,即使窗口最初是我的域名,然后重定向到FB,然后再重定向回来。我原以为可能是因为我在PHP中立即打开我的网站并重定向的原因,但即使在打开我的网站后,执行window.location.href = 'facebookssite.com',返回时仍然出现问题。

注意:由于安全原因,社交注册在iframe中无法使用Google、FB等。

0