小编agb*_*gbb的帖子

使用ALT + TAB切换程序/窗口或单击任务栏时,不会触发visibilitychange事件

基本上,问题在于事件"visibilitychange"的行为.

它被触发: - 当我切换到浏览器窗口内的不同选项卡时.

  • 当我单击浏览器窗口的最小化/恢复按钮时.

(还行吧)

它没有被触发: - 当我使用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
    }
});
Run Code Online (Sandbox Code Playgroud)

这可以在没有jQuery的情况下完成,但ALT + TAB和任务栏开关隐藏/显示预期行为仍然缺失:

if(document.addEventListener){
    document.addEventListener("visibilitychange", function() {
        // check for page visibility
    });
}
Run Code Online (Sandbox Code Playgroud)

我也尝试了ifvisible.js模块(https://github.com/serkanyersen/ifvisible.js),但行为是一样的.

ifvisible.on('blur', function() {
    // page is hidden
});

ifvisible.on('focus', …
Run Code Online (Sandbox Code Playgroud)

javascript events html5 event-handling javascript-events

22
推荐指数
2
解决办法
2万
查看次数