被触发了
– 当我切换到浏览器窗口中的不同选项卡
>当我点击浏览器窗口的最小化/恢复按钮
(还行吧)
没有触发:
– 当我使用ALT TAB切换到不同的窗口/程序
>当我切换到不同的窗口/程序单击任务栏
(这应该触发,因为,就像最小化时,窗口的可见性可能会改变)
W3页面可见性API文档:http://www.w3.org/TR/page-visibility/
关于ALT TAB /规格表中的程序切换的“页面可见性”没有定义.我猜这在操作系统和浏览器之间有所作为.
测试
>浏览器:
Chrome 40.0.2214.115 m / Firefox 36.0.1 / Internet Explorer 11.0.9600.17107
>操作系统:Windows 8.1
是否有解决方法来解决这个问题?实现是相当简单的,我使用jQuery听“visibilitychange”事件,然后在其回调中,我检查“document.visibilityState”的值,但是问题是事件在预期时没有触发.
$(document).on('visibilitychange',function() { if(document.visibilityState == 'hidden') { // page is hidden } else { // page is visible } });
这也可以在没有jQuery的情况下完成,但ALT TAB和任务栏切换隐藏/显示预期行为仍然缺失:
if(document.addEventListener){ document.addEventListener("visibilitychange",function() { // check for page visibility }); }
我也尝试过ifvisible.js模块(https://github.com/serkanyersen/ifvisible.js),但行为是一样的.
ifvisible.on('blur',function() { // page is hidden }); ifvisible.on('focus',function() { // page is visible });
我还没有在其他浏览器测试,因为如果我无法使它在Windows上的Chrome工作我真的不在乎其他浏览器.
提前感谢任何帮助或建议.
UPDATE
我尝试为事件名称(visibilitychange,webkitvisibilitychange,mozvisibilitychange,msvisibilitychange)使用不同的供应商前缀,但是当我切换到任务栏或ALT TAB中的其他程序时,仍然不会触发事件,或者即使我打开了开始菜单在Windows窗口中,覆盖整个屏幕.
我可以在Chrome,Firefox和Internet Explorer中重现完全相同的问题.
更新#2