检测Base App中的Closed选项卡

时间:2012-07-06 08:39:08

标签: jquery tabs window.open page-refresh

在jQuery中是否有一种方法可以检测我的基本应用程序中的关闭选项卡并使其刷新页面?

我建立了一个票务系统。单击故障单时,它使用target =“_ blank”在新选项卡中打开故障单。当您更新故障单(并且仅在您执行此操作时),然后单击“关闭选项卡”链接时,我希望主应用程序(上一个选项卡)能够识别此事件并自动刷新页面。

我知道我可以使用window.open()然后在循环上检测一个关闭的句柄,但它不够优雅,因为在IE上它有时不会在新标签中打开而是打开一个新窗口。使用target =“_ blank”,我想我已经看到IE打开一个新选项卡。我更喜欢标签。

2 个答案:

答案 0 :(得分:0)

如果你使用window.open,你也可以使用window.opener和window.onbeforeunload。唯一的缺点是你没有得到标签。 但那样你就不需要循环了。

例如:

主屏幕:

  • 点击事件:window.open(/ *打开你的窗口* /);

票证屏幕:

  • load event:在window.opener
  • 上触发onb​​eforeunload时绑定重新加载

答案 1 :(得分:0)

所以我们有一个带有票证表的父选项卡,然后是一个子选项卡,我们有一个实际的票证。然而,这不是真正的父/子关系,因为我使用target =“_ blank”点击而不是window.open()事件。

修复是一种kludge,但它的工作原理。只需将更改添加到“父”选项卡。首先,在Javascript中将gbRefreshStale全局布尔值添加到页面中,并将其值设置为0,如下所示:

var gbRefreshStale = 0;

其次,在每个target =“_ blank”上单击,使用jQuery拦截:

$('A[target=_blank]').click(function(){
  setTimeout('gbRefreshStale=1;clearTimeout();',500);
  return true;
});

然后,第三,您将需要此页面标题的mouseenter事件:

$('#header').mouseenter(function(){ 
  // assuming you called your banner/header as #header
  if (gbRefreshStale) {
    gbRefreshStale = 0;
    location.href = location.href;
  }
});

这里的效果是为故障单打开了一个新选项卡,但是如果有人关闭该选项卡并将其鼠标移过标题(他们可能会这样做,因为他们刚刚关闭子选项卡),父选项卡将刷新。如果打开和关闭多个选项卡,这也有效,并且此系统会阻止在父循环中刷新父选项卡。超时是必要的,因为否则某人的鼠标可能会在该选项卡打开之前穿过父级的#header部分。