Opera 12.10 对页面可视性(Page Visibility) API 的支持

最近发布的 Opera 12.10 增加了对页面可视性(Page Visibility) API 的部分支持。
这是一个简单却强大的 API,因为它允许开发者规定一个文档在被隐藏时的行为。如果你有过在办公室手忙脚乱地想找出 200 个标签页中哪个在播放你预料之外的声音这种尴尬情况,你会觉得页面可视性 API 相当实用。

工作原理

页面可视性 API 对 HTML5 文档 接口增加了两个属性 — hiddenvisibilityState — 和一个 visibilitychange 事件(event)。当文档的窗口或标签页不可见,document.hidden 的值将为 true,否则为 false

document.visibilityState 属性直接表明一个文档的特定状态:hidden 或者 visible。标准规格也概述了另两个值 — prerenderunloaded,不过尚未支持。

当一个文档的可视性状态发生改变,Opera 会触发 visibilitychange 事件。这就是有趣之处。当文档不可视,visibilitychange 句柄可以暂停该文档的媒体或动画。当文档再次转为可视,句柄能恢复播放媒体或动画。这对于内存密集型应用例如游戏等特别有用。这个 demo 使用视频展示了一个例子。一个小小的警告:每次这个视频所在标签页置于前台时它都会自动播放。

限制

对此 API 的实现情况可能和你的预想有所出入。例如,从 Opera 切换到其他程序不会触发 visibilitychange 事件。最小化浏览器窗口也不会。

由于页面可视性 API 只是针对文档,你不能用它决定哪一个标签页或者窗口处于活动状态。决定你的文档是否可视因而处于活动状态,这是可行的。但是无法决定当前其他哪个标签页或窗口获得焦点。

其他浏览器

Opera 不是唯一支持这个 API 的浏览器,但是,是目前唯一一个使用无前缀属性的浏览器。其他浏览器的相应属性如下所示。

  • Chrome / WebKit: document.webkitVisibilityStatedocument.webkitHidden
  • Firefox: document.mozVisibilityStatedocument.mozHidden
  • Internet Explorer: document.msVisibilityStatedocument.msHidden

此外你还要监听 webkitvisibilitychangemozvisibilitychange,和 msvisibilitychange 事件。

[ Via Opera Developer NewsOpera.IM 编译 ]

large porn tube

6条评论

    1. HTML5标准中的新东西到成熟时都是没有厂商前缀的,其他浏览器厂商最后都应该去掉前缀,这样一条代码就能让各个浏览器都通用,而不用像现在那样ms、moz、webkit各搞一套

评论已关闭。