有没有办法在IE8中检测到该窗口当前是否处于活动状态?

Mar*_*cik 10 javascript tabs internet-explorer-8

IE8中有没有办法检测窗口当前是否处于活动状态(正在活动选项卡/窗口中显示)?

我知道有像onfocusin/ 这样的事件onfocus- 但这不是一个完美的解决方案,因为窗口也必须获得焦点才能触发事件 - 所以当用户只是切换标签而不触摸窗口本身时,这不起作用.

我相信这种普通用例必须有一些简单,优雅的解决方案.

Mat*_*ens 13

我编写了一个执行此操作的jQuery插件:http://mths.be/visibility它为您提供了一个非常简单的API,允许您在页面的可见性状态发生变化时执行回调.

它通过使用支持它的页面可见性API来实现,并且回归到旧版focusblur旧版浏览器中.

演示: http ://mathiasbynens.be/demo/jquery-visibility

此插件只提供两个自定义事件供您使用:showhide.页面可见性状态更改时,将触发相应的事件.

您可以单独使用它们:

$(document).on('show', function() {
  // the page gained visibility
});
Run Code Online (Sandbox Code Playgroud)

…和…

$(document).on('hide', function() {
  // the page was hidden
});
Run Code Online (Sandbox Code Playgroud)

由于大多数时候您都需要这两个活动,因此您最好的选择是使用活动地图.这样,您可以一次绑定两个事件处理程序:

$(document).on({
  'show': function() {
    console.log('The page gained visibility; the `show` event was triggered.');
  },
  'hide': function() {
    console.log('The page lost visibility; the `hide` event was triggered.');
  }
});
Run Code Online (Sandbox Code Playgroud)

该插件将检测浏览器是否本机支持页面可见性API,并将此信息作为布尔值(true/ false)公开在$.support.pageVisibility:

if ($.support.pageVisibility) {
  // Page Visibility is natively supported in this browser
}
Run Code Online (Sandbox Code Playgroud)

  • 同样,如果用户在页面上切换另一个程序,这将无法正常工作。只能在选项卡之间切换。 (2认同)

Zar*_*Zar 0

这是使用 jQuery 实现的一个简单任务:

$(function() {
    window.isActive = true;
    $(window).focus(function() { this.isActive = true; });
    $(window).blur(function() { this.isActive = false; });
});
Run Code Online (Sandbox Code Playgroud)

全局 isActive 变量确定选项卡/窗口是否处于活动状态。