我已经广泛地研究了这个问题(有许多类似的问题),但我没有找到我想要的确切答案。
我正在创建一个单点登录小部件,因此用户流程如下:
用户点击登录打开窗口(domain1)>登录流程(domain2)>登录页面(domain1)
下面是我在登陆页面上使用的代码:
<html>
<head>
<title>Redirect</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
if (window.opener && !window.opener.closed) {
setTimeout(function(){
window.opener.location.href = "[some URL]";
window.close();
},2000);
}
</script>
</head>
<body>
<p>Logging you in...</p>
</body>
</html>
把登陆页放在最后的目的是为了在访问window.opener时消除跨域问题。
这在除IE以外的所有浏览器中都像一个魅力一样有效(喘气!)IE显示窗口。opener是空的,即使我已经返回到我自己的域。
到目前为止,我读到的东西都不能真正解决这个问题。我认为一定有一些方法可以做到这一点,因为这么多的网站都在使用FSSO。不幸的是,我们没有办法找到一个替代弹出窗口的方法。
由于浏览器相关的安全性,这在IE中是不可能做到的吗?我能想到的唯一一件事是在父母身上放上某种监听器,等待孩子关闭。嗯。
这个问题似乎与我们公司IE构建中设置的安全区域有关。不同的领域被划分为不同的区域。显然IE失去了窗口的值。当通过这些区域时,无需费心重置它。当在IE的外部构建上进行测试时,它工作了。