检测从父级关闭的新选项卡(开场)

时间:2014-07-06 04:55:24

标签: javascript browser

我已经阅读了很多帖子,但他们似乎都没有回答我的确切问题。

是否可以检测由target="_blank" attr打开的标签页?

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

当该标签关闭时,我需要刷新原始窗口(父窗口或开启窗口)。

有什么想法吗?

修改

进一步解释

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

最终说明 我使用了很多身份验证方法,所以上面的内容实际上是无关紧要的。

我只需要找到一种方法来监视已经打开的新选项卡/窗口,或者甚至让新窗口/选项卡触发浏览器事件onunload到父/主窗口知道它关闭以便它可以刷新。 / p>

2 个答案:

答案 0 :(得分:3)

因此,如果有人感兴趣,我现在就可以使用它,直到找到更好的解决方案。

首先我做的是让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);    
            }
        }       
    }
}

每秒检查窗口并不是最好的或最好的做法,但是现在它会起作用,直到找到更好的解决方案。

答案 1 :(得分:0)

这是有效的examplehttp://jsfiddle.net/sureshpattu/w8x7dqxr/)和代码

HTML

<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);
      }
    }
  }
}