【问题标题】:How to get back to window.opener page?如何返回 window.opener 页面?
【发布时间】:2018-08-23 08:57:39
【问题描述】:

我有一个窗口 A,它使用 window.open 打开窗口 B。当我单击窗口 B 中的主页按钮时,我需要关闭窗口 B 并将焦点返回到窗口 A。要完成任务,我使用 $window.opener && !$window.opener.closed 检查窗口 A 是否仍然打开。一旦确认窗口 A 仍然打开,我使用 $window.opener.focus 将焦点放回窗口 A我使用 $window.close 关闭窗口 B。但是有些情况需要注意。

我需要 2 个场景的建议。

  1. 打开窗口 B 后,如果窗口 A 切换到其他页面,比如 www.cnn.com,如何检查窗口 A 是否仍然指向我的页面或至少指向我的域?

  2. 我的窗口 A 和窗口 B 是两个选项卡,如果有一些其他选项卡说窗口 C 已打开并且窗口 C 选项卡放置在选项卡 A 和选项卡 B 之间,使用我现有的代码,当我单击在 home 按钮上,窗口 B 关闭并显示窗口 C。如何切换回窗口 A 选项卡?

如果我遗漏了一些细节,请告诉我。

【问题讨论】:

标签: javascript angularjs


【解决方案1】:

您可以使用 localStorage 在页面加载时将域上的每个活动 url 存储在一个对象中。然后,当您离开页面时,将其从对象中删除并更新存储。

var pages;
window.onload = ()=> { 
    pages = localStorage.getItem("pages") ? JSON.parse(localStorage.getItem("pages")) : {};
    pages[window.location.href] = true;
}

window.onbeforeunload = ()=> {
    pages[window.location.href] = false;
    localStorage.setItem("pages", JSON.stringify(pages));
}

你想随时查看页面是否还在打开使用

if(pages["myurl"]){
    // do something
}

【讨论】:

  • 如何检查特定的 Window A 页面是否仍然打开?
  • 使用第二个代码块,但将“myurl”替换为页面A的url。
  • 让我们考虑一个场景:如果打开了窗口 A 的 3 个副本(比如说 A.1、A.2、A.3),如果窗口 B 从 A.1 打开并且我关闭或更改 A.1 窗口的 URL。当在窗口 B 上单击主页按钮时,如果我尝试使用代码的第二块,由于 A.2 和 A.3 仍然打开,页面“myUrl”将返回 true。,我的窗口 A.1 所在的位置不存在,如何处理?
猜你喜欢
  • 1970-01-01
  • 2020-02-27
  • 2017-06-05
  • 2023-03-13
  • 1970-01-01
  • 2022-10-18
  • 2019-11-28
  • 2020-05-12
  • 2012-08-04
相关资源
最近更新 更多