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

时间:2010-04-04 11:01:07

标签: browser google-chrome focus window

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

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

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

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

谢谢!

4 个答案:

答案 0 :(得分:11)

您可以使用chrome.windows API来监控此问题。您将为onFocusChanged事件添加一个侦听器,如果事件返​​回-1chrome.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;
    }
});

Chrome.Window Doc

答案 1 :(得分:5)

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

window.setInterval(checkBrowserFocus, 1000);  

function checkBrowserFocus(){

    chrome.windows.getCurrent(function(browser){

      console.log(browser.focused)

    })

}

答案 2 :(得分: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.');
});

答案 3 :(得分:1)

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);

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

参考:https://developer.chrome.com/extensions/windows