我对此进行了广泛的研究(有很多类似的问题),但我没有找到我正在寻找的确切答案。
我正在创建一个单点登录小部件,因此用户流程如下:
用户点击登录打开窗口(域1)>登录流程(域2)>登陆页面(域1)
这是我在登录页面上使用的代码:
<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 为空,即使我已返回自己的域。
到目前为止,我读过的任何内容都没有真正解决这个问题。我不得不认为必须有某种方法可以做到这一点,因为很多网站都在使用 FSSO。不幸的是,我们无法找到弹出窗口的替代方案。
由于浏览器相关的安全性,这在 IE 中是不可能的吗?我能想到的唯一另一件事是在父母身上放置某种监听器以等待孩子关闭。啊。