最近发布的 Opera 12.10 增加了对页面可视性(Page Visibility) API 的部分支持。
这是一个简单却强大的 API,因为它允许开发者规定一个文档在被隐藏时的行为。如果你有过在办公室手忙脚乱地想找出 200 个标签页中哪个在播放你预料之外的声音这种尴尬情况,你会觉得页面可视性 API 相当实用。
工作原理
页面可视性 API 对 HTML5 文档
接口增加了两个属性 — hidden
和 visibilityState
— 和一个 visibilitychange
事件(event)。当文档的窗口或标签页不可见,document.hidden
的值将为 true
,否则为 false
。
document.visibilityState
属性直接表明一个文档的特定状态:hidden
或者 visible
。标准规格也概述了另两个值 — prerender
和 unloaded
,不过尚未支持。
当一个文档的可视性状态发生改变,Opera 会触发 visibilitychange
事件。这就是有趣之处。当文档不可视,visibilitychange
句柄可以暂停该文档的媒体或动画。当文档再次转为可视,句柄能恢复播放媒体或动画。这对于内存密集型应用例如游戏等特别有用。这个 demo 使用视频展示了一个例子。一个小小的警告:每次这个视频所在标签页置于前台时它都会自动播放。
限制
对此 API 的实现情况可能和你的预想有所出入。例如,从 Opera 切换到其他程序不会触发 visibilitychange
事件。最小化浏览器窗口也不会。
由于页面可视性 API 只是针对文档,你不能用它决定哪一个标签页或者窗口处于活动状态。决定你的文档是否可视因而处于活动状态,这是可行的。但是无法决定当前其他哪个标签页或窗口获得焦点。
其他浏览器
Opera 不是唯一支持这个 API 的浏览器,但是,是目前唯一一个使用无前缀属性的浏览器。其他浏览器的相应属性如下所示。
-
Chrome / WebKit:
document.webkitVisibilityState
和document.webkitHidden
-
Firefox:
document.mozVisibilityState
和document.mozHidden
-
Internet Explorer:
document.msVisibilityState
和document.msHidden
此外你还要监听 webkitvisibilitychange
、mozvisibilitychange
,和 msvisibilitychange
事件。
[ Via Opera Developer News – Opera.IM 编译 ]
:razz:
学习
无前缀属性代表什么呢… :shock:
HTML5标准中的新东西到成熟时都是没有厂商前缀的,其他浏览器厂商最后都应该去掉前缀,这样一条代码就能让各个浏览器都通用,而不用像现在那样ms、moz、webkit各搞一套
这个api蛮实用的,用户体验不错 :cool:
可以只关闭网页声音而不是系统了