javascript - 是否可以确定命名窗口是否在 JavaScript 中打开?

标签 javascript

我正在从事站点间单点登录项目,遇到了一个小问题。当用户退出“父”站点时,需要在包含“子”站点的弹出窗口中加载特定页面。但是,我无法存储对 window.open(...) 返回值的引用,因为必须允许用户在注销前在每个站点上随意导航。

如果我可以假设子站点始终打开,这将很容易,因为同名窗口的另一个 window.open(...) 会更改其 URL。但是,如果弹出窗口尚未打开(并非所有用户都可以访问子站点),则该弹出窗口不能出现。

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

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

当用户不访问或不能访问子站点时:

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

所以我的限制是:

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

我无法在 Google 或 SO 上找到任何相关资源。有办法实现吗?

最佳答案

是的,您可以,但要遵守一项重要限制。

它取决于以下行为:

  1. window.open 的前两个参数是 URL 和窗口名称
  2. window.open 返回对窗口的引用
  3. 如果指定名称的窗口已经打开,则返回对该窗口的引用而不是对新窗口的引用
  4. 如果 URL 为 NULL,现有窗口将不会导航到新页面

这意味着您可以获得对现有窗口的引用,而不会丢失该窗口已打开的页面。但是,如果不存在具有该名称的窗口,打开。

我们在 http://carbonlogic.co.uk/ 中使用了这种方法但由于 Flash Player 问题,弹出窗口的内容目前无法正常工作

关于javascript - 是否可以确定命名窗口是否在 JavaScript 中打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/563199/

相关文章:

javascript - 更改 Content-Type 时,Http-Method 从 POST 更改为 OPTIONS

javascript - Masonry/Isotope.js 无法正常工作

javascript - 使用 Multer 重命名上传的文件不起作用 (Express.js)

javascript - 无法获取带空格的文本框值 - jquery

javascript - 在 foreach 循环中使用 jquery 和 php 倒数计时器不显示正确的时间

javascript 位置 href 更改了 queryString(&gt 到 >)

JavaScript 在对象中递归替换

javascript - JavaScript 是否具有 double float ?

javascript - 如何在 node.js shell 中实现制表符补全?

javascript - 下拉选择显示不同 <div> 的结果