有没有办法判断浏览器是否处于活动状态?

Is there a way to tell if a browser is active?

在我的网站上,我有一个重要的通知提示本机 alert() 以便在 window 尚未聚焦时将网站带到前台。问题在于,在某些浏览器上,如果用户正在使用另一个桌面应用程序(Photoshop、Microsoft Word 等),它不会将浏览器置于该应用程序之上。在这种情况下,警报几乎没有用,我想忽略它(因为它会阻止我页面上的其他脚本)。

有没有办法判断浏览器是设备上的活动应用程序?或者是否有一种不同的、非阻塞的方式将 window 带到前台?

谢谢!

说明: 我已经知道如何检查 window 在浏览器中是否处于活动状态,但我只是不知道如何检查浏览器应用程序本身是否处于活动状态。 另外,我需要支持的浏览器是 Chrome、Safari、Firefox 和 IE >= 9

有一个全局变量存储window是否激活:

var window_active = true;

现在将事件侦听器添加到 "listen" 以便 window(取消)激活:

window.onblur = function () {
    window_active = false;
};
window.onfocus = function () {
    window_active = true;
};

并且当您调用 alert 函数时,检查全局变量:

if (window_active)
    alert("notification");

我想提一下,如果您更改选项卡或单击 url 栏,window 将被停用,这可能不是您想要的。

您应该使用新的 Notification 对象。即使浏览器未获得焦点,它也能正常工作,并且对于向用户发送重要通知很有用。

示例:http://jsfiddle.net/howderek/792km8td/

document.getElementById('notif').onclick = function () {
    
    function notify () {
        var notification = new Notification('Test!');
    }
    
    
    if (Notification.permission === "granted") {
        setTimeout(notify, 5000);        
    } else {
        Notification.requestPermission(function () {
            if (Notification.permission === "granted") {
                setTimeout(notify, 5000);        
            }             
        });
    }
}

https://developer.mozilla.org/en-US/docs/Web/API/notification

您可以为此使用 Page Visibility API

兼容IE 10+。

代码小例子:

document.addEventListener("visibilitychange", function(e) {
  console.log("visibility changed!", e);
  if (document.visibilityState === 'visible') {
    console.info("window is visible now!");
  }
  else {
    console.info("something else, maybe you changed tab or minimized window!");
  }
  console.log("check the visibilityState property on document object for more info");
});

即使用户在选项卡打开时将浏览器最小化,这也会起作用,所以我想这符合您的需要:)