我正在从事站点间单点登录项目,遇到了一个小问题。当用户退出“父”站点时,需要在包含“子”站点的弹出窗口中加载特定页面。但是,我无法存储对 window.open(...)
返回值的引用,因为必须允许用户在注销前在每个站点上随意导航。
如果我可以假设子站点始终打开,这将很容易,因为同名窗口的另一个 window.open(...)
会更改其 URL。但是,如果弹出窗口尚未打开(并非所有用户都可以访问子站点),则该弹出窗口不能出现。
我认为这给了我两个相互矛盾的场景。当用户访问子站点时:
- 用户登录父网站。
- 用户点击子站点的链接
- 子站点出现在名为“child_popup”的窗口中。
- 用户在父站点中四处浏览,忘记了子窗口的存在。
- 用户退出父网站。
- 子弹出窗口被重定向到子站点的注销页面。
当用户不访问或不能访问子站点时:
- 用户登录父网站。
- 用户在父站点中广泛浏览。
- 用户退出父网站。
- 不应出现弹出窗口!
所以我的限制是:
- 我无法在 JS 中存储对窗口的引用,因为用户可能会在访问子站点和注销之间导航到任意数量的页面。
- 我对子网站的内容零控制(我的雇主经营父网站)。
- 不能将父站点转换为框架以提供“全局”JS 范围。 :-)
我无法在 Google 或 SO 上找到任何相关资源。有办法实现吗?
最佳答案
是的,您可以,但要遵守一项重要限制。
它取决于以下行为:
- window.open 的前两个参数是 URL 和窗口名称
- window.open 返回对窗口的引用
- 如果指定名称的窗口已经打开,则返回对该窗口的引用而不是对新窗口的引用
- 如果 URL 为 NULL,现有窗口将不会导航到新页面
这意味着您可以获得对现有窗口的引用,而不会丢失该窗口已打开的页面。但是,如果不存在具有该名称的窗口,将打开。
我们在 http://carbonlogic.co.uk/ 中使用了这种方法但由于 Flash Player 问题,弹出窗口的内容目前无法正常工作
关于javascript - 是否可以确定命名窗口是否在 JavaScript 中打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/563199/