Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Browser 通过Google Chrome扩展检测浏览器焦点/失焦_Browser_Google Chrome_Focus_Window - Fatal编程技术网

Browser 通过Google Chrome扩展检测浏览器焦点/失焦

Browser 通过Google Chrome扩展检测浏览器焦点/失焦,browser,google-chrome,focus,window,Browser,Google Chrome,Focus,Window,有没有一种方法可以确定Google chrome是聚焦还是失焦?我正在创建一个应用程序,它需要知道用户当前是否正在使用浏览器 通过将检测绑定到Google扩展中的内容脚本,我尝试使用模糊和聚焦,但问题是单击地址栏也会触发模糊事件。检测鼠标移动也是如此,将不会检测到鼠标移动到查看区域之外 我也试过看onFocusChanged,但它似乎只检测Chrome的windows中的变化,而不是Chrome之外的应用 有人对此有其他想法吗?另外,如果我为firefox创建一个插件,这会更容易吗 谢谢 是的,

有没有一种方法可以确定Google chrome是聚焦还是失焦?我正在创建一个应用程序,它需要知道用户当前是否正在使用浏览器

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

我也试过看onFocusChanged,但它似乎只检测Chrome的windows中的变化,而不是Chrome之外的应用

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


谢谢

是的,这是通过操纵模糊和聚焦事件来完成的。 如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.');
});

您可以使用
chrome.windows
API来监视此操作。您将为
onFocusChanged
事件添加一个侦听器,如果该事件返回
-1
chrome.windows.WINDOW\u ID\u 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;
    }
});

也许有些人看不到@Giedrius的评论。这段时间有效:

window.setInterval(checkBrowserFocus, 1000);  

function checkBrowserFocus(){

    chrome.windows.getCurrent(function(browser){

      console.log(browser.focused)

    })

}
或:

window.focused为false表示没有聚焦的chrome窗口


参考资料:

正如问题本身所提到的,当用户导航到不同的应用程序时,onFocusChanged不会被触发,它只在用户在不同的chrome窗口之间导航时起作用。这意味着它不是一个有效的解决方案。到目前为止,我发现的唯一方法是每隔一段时间查询一次getCurrent,并检查其focused属性,即使在当前窗口中,当不同的应用程序处于焦点时,该属性也是错误的。(这是在Chrome39Canary,Windows8上测试的)不久前也有人提出了一个草案,我们可以用它来获取窗口处于哪个状态的信息,但我不知道是否做了更多的工作。一个非常有用的扩展可以完成,比如在聚焦窗口上刷新页面。对于web开发人员来说,这将是一个非常好的功能…当用户导航到不同的应用程序时,onFocusChanged不会被触发。。。对我来说不是这样。这种聚焦检测方法很有效。当我从Chrome切换到不同的应用程序时,
inFocus
变为
false
,反之亦然。这比
setTimeout()
(在Chrome 76.0.3809.132 MacOS 10.13.6上测试)要好得多,@Giedrius的评论在2020年对Chrome的现代版本仍然正确吗?你找到答案了吗?chrome.window.onFocusChanged似乎不起作用InfoFocusChanged现在可用于检测完全失去焦点的chrome:
setInterval(function() {
    chrome.windows.getLastFocused(function(window) {
        console.log(window.id.toString() + "  " + window.focused.toString())
    });
}, 1000);
setInterval(function() {
    chrome.windows.getCurrent(function(window) {
        console.log(window.id.toString() + "  " + window.focused.toString())
    });
}, 1000);