我对此进行了广泛的研究(有很多类似的问题),但我找不到我正在寻找的确切答案。
我正在创建一个单点登录小部件,因此用户流程如下:
用户点击登录以打开窗口(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说window.opener是null,即使我已经返回到我自己的域。
到目前为止,我所读到的内容并没有真正解决这个问题。我必须认为必须有一些方法可以做到这一点,因为很多网站都在使用FSSO。不幸的是,我们不能选择弹出窗口的替代方案。
由于与浏览器相关的安全性,这在IE中是不可能的吗?我能想到的唯一另一件事就是在父母身上放置一些监听器来等待孩子关闭。啊。
答案 0 :(得分:1)
似乎问题与我们的企业IE版本上设置的安全区域有关。不同的域名被降级为不同的区域。显然IE在通过这些区域时会丢失window.opener的值,并且不会重置它。在IE的外部版本上进行测试时,它可以工作。