2

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

我建立了一个票务系统。当您单击工单时,它会使用 target="_blank" 在新选项卡中打开工单。当您更新工单时(并且仅当您这样做时),然后单击“关闭选项卡”链接,我希望主应用程序(前一个选项卡)能够识别此事件并自动刷新页面。

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

4

2 回答 2

0

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

例如:

主屏幕:

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

票务画面:

  • load 事件:在 window.opener 上触发 onbeforeunload 时绑定重新加载
于 2012-07-06T09:29:38.197 回答
0

因此,我们有一个带有工单表的父选项卡,然后是一个包含实际工单的子选项卡。然而,这并不是真正的父/子关系,因为我使用的是 target="_blank" 点击而不是 window.open() 事件。

修复有点杂乱无章,但它确实有效。只需将更改添加到“父”选项卡。首先,将 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 部分。

于 2012-07-08T05:03:11.513 回答