JS监听浏览器窗口切换_前端如何监听浏览器是用的哪个窗口

以前看到过一些网页,在标签切换到其它地址时,网页上的标题上会发生变化,一直不知道这个是怎么做的,最近查了一些资料才发现有一个 visibilitychange 事件就可以搞定,这里将介绍一下页面可见性(Page Visibility)API的简单应用。

visibilitychange事件介绍

简单的说,当用户最小化网页或移动到另一个标签时,API会发送 visibilitychange 有关该网页的可见性的事件。你可以检测到该事件并执行一些操作或行为。例如:标签页隐藏的时候停止播放音乐视频、停止一些不必要的轮询,还有停止一些诸如轮播等循环动画效果等等。这些可以节省服务器和本地的开销。

用例

  • 网站有一个图片轮播,不应前进到下一张幻灯片,除非用户正在查看该页面。
  • 显示信息仪表板的应用程序不希望在页面不可见时轮询服务器以进行更新。
  • 网页要检测其是否正在进行预渲染,以便其可以准确计算网页浏览量。

以前开发人员往往在客串上注册 onblur 和onfocus 来检测页面是不是活动页面,但它不会告诉您页面对用户是隐藏的。Page Visibility API 解决了这个问题。

浏览器兼容性

这个事件已经得到现代浏览器广泛的支持,不过一些老版本的浏览器需要加相应的前缀。

Chrome (Webkit)Firefox (Gecko)Internet ExplorerOperaSafari (WebKit)
13前缀webkit 33无需前缀10前缀moz18无需前缀10前缀ms12.107

document的可见性属性

Page Visibility (Second Edition) 中定义了2个只读的 document 属性:hiddenvisibilityState

其中 document.hidden 是一个布尔值,简单的表示标签页显示或者隐藏。而 document.visibilityState 属性更为详细,目前有四个可能的值:

visible : 页面内容至少部分可见。这意味着在实际情况中,该网页是一个非最小化窗口的可见标签页。

hidden : 页面内容是对用户不可见。实际上,这意味着该文档是后台标签页或最小化窗口的一部分,或者系统锁屏是时的状态。

prerender : 网页内容被预渲染并且用户不可见。

unloaded : 如果文档被卸载,那么这个值将被返回。

一般情况下我们使用 document.hidden 就能满足通常的需求。

为了支持老版本的浏览器,我们需要对 document.hidden 在做一些前缀处理:

function getHiddenProp()
{
    var prefixes = ['webkit','moz','ms','o'];
    
    // if 'hidden' is natively supported just return it
    if ('hidden' in document) return 'hidden';
    
    // otherwise loop over all the known prefixes until we find one
    for (var i = 0; i < prefixes.length; i++)
    {
        if ((prefixes[i] + 'Hidden') in document) 
            return prefixes[i] + 'Hidden';
    }
 
    // otherwise it's not supported
    return null;
}

同样的,我们可以获取 document.visibilityState 属性:

function getVisibilityState() 
{


### 最后

面试题千万不要死记,一定要自己理解,用自己的方式表达出来,在这里预祝各位成功拿下自己心仪的offer。
**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)**

![大厂面试题](https://img-blog.csdnimg.cn/img_convert/706a5e7a851ae8c0c7d8711d58b3def1.webp?x-oss-process=image/format,png)

![面试题目录](https://img-blog.csdnimg.cn/img_convert/5d6341408218ed55c4ec3b6304b8053a.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/651037ac37a96ce3b8ffe0047004c70e.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/d9a1eb663ae0e7b99a6aa631ab23e5f2.webp?x-oss-process=image/format,png)



14310254766)]

[外链图片转存中...(img-fo3droON-1714310254767)]

[外链图片转存中...(img-gM7gwYMm-1714310254767)]



  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值