我正在尝试决定是否做一个有点昂贵的 javascript-ajaxing-to-the-server 操作,但只有当用户可以看到网页时才值得这样做,所以我试图检测到这一点。
最初我很高兴找到“visibilitychange”API,但它看起来只检测网页是否在隐藏选项卡中。如果用户打开一个新的浏览器窗口而不是一个新的选项卡,则不会调用该事件。当用户更改为不同的应用程序时也不会调用它。
我也想如果浏览器不在前台我想放慢操作,所以实际上有三种状态:
- "request-every-5-seconds" 浏览器是否有输入焦点?
- "request-every-minute" 页面的任何部分实际上在用户的显示器上吗?
- “不请求”浏览器隐藏在另一个窗口下。
这样,访问我的网页并打开浏览器的用户将不会使用服务器或他们计算机上的资源。
对于第一个状态监控,“onfocus”主要是有效的,但焦点可能会丢失给开发人员工具。这有点烦人,但这不是典型的客户,所以我可以忍受。
对于第二种状态,我不知道从哪里开始。我的一个想法是检测浏览器是否真的在“绘画”,但我还没有找到任何检测方法。
您如何决定是否值得检查更新?
[注意:我已经在使用 jQuery,所以基于 jQuery 的答案很好。]
谢谢。