通过Google Chrome扩展程序检测浏览器焦点/焦点外

Pau*_*aul 14 browser google-chrome focus window

有没有办法找出Google Chrome是关注焦点还是失焦?我正在创建一个应用程序,需要知道用户当前是否正在使用浏览器.

通过在Google扩展程序中通过内容脚本绑定检测,我尝试使用模糊和焦点,但问题是单击地址栏也会触发模糊事件.检测鼠标移动也是如此,其中将不会检测到将鼠标移动到观看区域之外.

我也试过看onFocusChanged,但它似乎只能检测出chromes'窗口中的变化而不是Chrome之外的应用程序.

有人对此有其他想法吗?另外,如果我为firefox创建了一个附加组件,这会更容易吗?

谢谢!

J M*_*Max 12

您可以使用chrome.windowsAPI来监控它.您将为onFocusChanged事件添加一个侦听器,如果事件已返回,-1或者chrome.windows.WINDOW_ID_NONE您知道浏览器失去焦点:

var inFocus = true;  // global boolean to keep track of state
chrome.windows.onFocusChanged.addListener(function(window) {
    if (window == chrome.windows.WINDOW_ID_NONE) {
        inFocus = false;
    } else {
        inFocus = true;
    }
});
Run Code Online (Sandbox Code Playgroud)

Chrome.Window Doc

  • 正如问题本身所提到的,当用户导航到不同的应用程序时,不会触发onFocusChanged,它仅在用户在不同的chrome窗口之间导航时才有效.这意味着它不是一个有效的解决方案.到目前为止,我发现的唯一方法是每隔一段时间间隔查询一次getCurrent并检查其focus属性,即使在当前窗口当不同的应用程序处于焦点时,该属性也是假的.(这是在铬39金丝雀,Windows 8上测试的) (16认同)
  • _...当用户导航到不同的应用程序时,不会触发 onFocusChanged..._ 对我来说不是这样。这种焦点检测方法有效。当我从 Chrome 切换到不同的应用程序时,“inFocus”将变为“false”,反之亦然。这比 `setTimeout()` 好得多(在 Chrome 76.0.3809.132 MacOS 10.13.6 上测试) (2认同)

Cla*_*nga 8

也许有些人看不到@Giedrius的评论。此间隔有效:

window.setInterval(checkBrowserFocus, 1000);  

function checkBrowserFocus(){

    chrome.windows.getCurrent(function(browser){

      console.log(browser.focused)

    })

}
Run Code Online (Sandbox Code Playgroud)


Aug*_*ill 1

是的,这是通过操纵模糊和焦点事件来完成的。就像 jQuery 中的这个例子:

$(window).blur(function(){
    // do something when it loose focus like that:
    alert('Good Bye.');
});

$(window).focus(function(){
    // do something when it gains focus
    alert('Welcome back.');
});
Run Code Online (Sandbox Code Playgroud)