【问题标题】:Detect whether a window is visible [duplicate]检测窗口是否可见[重复]
【发布时间】:2012-09-14 05:34:34
【问题描述】:

可能重复:
Javascript: Is there any way to detect that window is currently active? (i.e. is beening shown on active tab/window)

我有一个基于 Web 的仪表板,它向医院楼层的护士等显示关键的时间敏感消息。挑战在于,如果仪表板未打开或最小化,他们将看不到消息并能够做出响应。我目前跟踪应用程序运行的时间百分比(它每 10 秒通过 AJAX 轮询新消息,因此我可以轻松查看每小时执行多少请求或其他),但这并不能告诉我应用程序是否已最小化.

一种方法是使用onfocus/onblur,但这种方法效果有限,因为部署此方法的大多数计算机都是双显示器计算机,并且在使用另一个屏幕上的临床信息系统。使用 focus/blur 方法时,此状态将被视为“未聚焦”,但我希望它在我的统计数据中被视为“开放”。

关于检测窗口可见性的任何想法?我在想可能包括一个微小的 Flash“像素”并检测它是否可见 - 还有其他想法吗?

【问题讨论】:

  • 有什么比 onfocus/onblur 在 IE

标签: javascript analytics


【解决方案1】:

您可以在支持它的浏览器中使用Page Visibility API。否则,正如您所说,您将需要使用带有 onfocus/onblur 的 hack。

visibility.js 是一个将所有浏览器抽象出来的库。如果浏览器不支持 Page Visibility API,它将使用 onblur/onfocus hack。

function isPageHidden(){
     return document.hidden || document.msHidden || document.webkitHidden || document.mozHidden;
 }

来源:http://www.nczonline.net/blog/2011/08/09/introduction-to-the-page-visibility-api/

阅读:https://developer.mozilla.org/en-US/docs/DOM/Using_the_Page_Visibility_API

【讨论】:

  • 这对于现代浏览器来说非常有用。不幸的是,我的医院仍然停留在 IE7 上——在我几周前进行的一项测量中,我 84% 的流量来自旧版 IE,10% Firefox,7% Chrome。所以我可能会使用页面可见性来获得 17% 的更好统计数据,但我想我对 IE 用户的 onfocus/onblur 卡住了。
  • 你可以使用visibility.js并获取所有这些
  • 你能说服你的用户在 IE 上安装 Chrome Frame 吗?
  • visibility.js 是否真的将功能添加到旧浏览器?还是只是无形地退化?
  • 如果 document.hidden 为 false(不是未定义),此代码将尝试 document.msHidden 等,最终将返回 undefined,对于非 mozilla 浏览器不为 false
猜你喜欢
  • 1970-01-01
  • 2016-12-29
  • 2012-02-05
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 2014-01-14
相关资源
最近更新 更多