是否可以确定是否在JavaScript中打开了一个命名窗口?

Ben*_*ank 5 javascript

我正在进行一个站点间的单点登录项目,但是我的膝盖上出现了一个很小的问题。当用户注销“父”站点时,需要在包含“子”站点的弹出窗口中加载特定页面。但是,我不能存储对的返回值的引用window.open(…),因为在注销之前必须允许用户在每个站点上的任意位置进行导航。

如果我可以假设子站点始终处于打开状态,这将很容易,因为另一个window.open(…)到相同命名窗口的站点将更改其URL。然而,在弹出不能引起出现,如果它是尚未打开(不是所有用户都可以访问到子站点)。

我认为这给了我两个矛盾的场景。用户访问子站点时:

  1. 用户登录父站点。
  2. 用户点击子网站链接
  3. 子站点出现在名为“ child_popup”的窗口中。
  4. 用户在父站点中四处浏览,而忘记了子窗口的存在。
  5. 用户退出父站点。
  6. 子弹出窗口将重定向到子站点的注销页面。

并且当用户不访问或无法访问子站点时:

  1. 用户登录父站点。
  2. 用户在父站点中进行广泛浏览。
  3. 用户退出父站点。
  4. 不应出现任何弹出窗口!

所以我的局限性是:

  • 我无法在JS中存储对该窗口的引用,因为用户可以在访问子站点与注销之间导航到任意数量的页面。
  • 我对子站点的内容具有控制权(我的雇主经营父站点)。
  • 父站点无法转换为框架以提供“全局” JS作用域。:-)

我无法在Google或SO上找到任何相关资源。有没有办法做到这一点?

Ben*_*ank 1

我们无法找到一种方法来检测子站点窗口是否仍然打开,但我们想出了一个满足我们业务需求的解决方法:

  1. 启动子弹出窗口时从父站点设置 cookie A。
  2. 在每次页面加载时从子站点设置 cookie B。
  3. 在每个卸载页面上从子站点清除 cookie B。
  4. 退出父站点时:
    1. 如果设置了 cookie A,请将其清除并关闭与子站点的本地连接。
    2. 如果设置了 cookie B,请清除它并在弹出窗口中打开子注销页面。