检测从父(打开器)关闭的新选项卡

Detect new tab closing from parent(opener)

本文关键字:新选项 选项 检测      更新时间:2023-09-26

我读了一堆帖子,但似乎没有一个能准确回答我的问题。

是否有可能检测到由target="_blank" attr打开的选项卡关闭?

我需要一个新的标签/窗口打开,用户将选择一个选项,然后标签关闭。

当该选项卡关闭时,我需要原始窗口(父窗口或打开器)刷新。

任何想法?

编辑:

进一步解释

我有一个应用程序打开另一个应用程序在iframe。iframe中打开的应用程序连接到社交媒体,用于发布共享。打开的新选项卡用于身份验证/oauth。主窗口中打开的页面显示已连接的帐户,并允许您连接新帐户(在iframe的主窗口中)。身份验证/oauth打开一个新窗口/选项卡来执行舞蹈,然后关闭自己。我需要父窗口(主窗口与iframe在其中)知道,新的选项卡/窗口关闭,所以它可以刷新内容和反映新的连接。

我使用了很多身份验证方法,所以上面的内容真的是无关紧要的。

我只需要找到一种方法来监控新标签/窗口已经打开,甚至有新的窗口/标签触发一个浏览器事件onunload,父/主窗口知道它关闭,所以它可以刷新。

所以如果有人感兴趣,这就是我现在的工作方式,直到我找到一个更好的解决方案。

首先,我做的是让javascript打开我的窗口,将其分配给一个变量,因此它有一个引用名称。

var checkWindow = false;
var fbAuthWindow;
function openFBAuth(url) {
    fbAuthWindow=window.open(url);
    checkWindow = true;
    setTimeout(function() { checkAuthWindow('fb'); }, 1000);
}

还设置了一个超时,每秒钟运行一次,而checkWindow == true检查窗口是否关闭。如果窗口被关闭(我的脚本在身份验证完成时关闭窗口),则页面重新加载,最终将checkWindow设置为false。

function checkAuthWindow(win){
    if(checkWindow == true){
        if(win == 'fb'){
            if(fbAuthWindow.closed){
                window.location.reload();
            } else {
                setTimeout(function() { checkAuthWindow('fb'); }, 1000);    
            }
        }       
    }
}

它不是最漂亮的,也不是最好的做法,每秒钟检查一次窗口,但现在它会工作,直到我找到一个更好的解决方案。

下面是工作示例(http://jsfiddle.net/sureshpattu/w8x7dqxr/)和代码


<button class="openPopActBtn">Open pop window </button>
Javascript

var checkWindow = false;
var fbAuthWindow;
$('.openPopActBtn').click(function() {
  openFBAuth('www.google.com');
});
function openFBAuth(url) {
  fbAuthWindow = window.open(url);
  checkWindow = true;
  setTimeout(function() {
    checkAuthWindow('fb');
  }, 1000);
}
function checkAuthWindow(win) {
  if (checkWindow == true) {
    if (win == 'fb') {
      if (fbAuthWindow.closed) {
        window.location.reload();
      } else {
        setTimeout(function() {
          checkAuthWindow('fb');
        }, 1000);
      }
    }
  }
}