Обнаружение фокуса браузера/вне фокуса с помощью расширения Google Chrome

Есть ли способ узнать, находится ли Google хром в фокусе или не в фокусе? Я создаю приложение, которое должно знать, использует ли пользователь браузер в данный момент.

Объясняя обнаружение через контент script в расширении Google, я попытался использовать размытие и фокус, но проблема в том, что нажатие на адресную строку также вызывает событие размытия. То же самое касается обнаружения движения мыши, где перемещение мыши за пределами области просмотра не будет обнаружено.

Я также пробовал смотреть на onFocusChanged, но кажется, что он только обнаруживает изменения в окнах хромированных приложений вне Chrome.

У кого-нибудь есть другие идеи для этого? Кроме того, было бы проще, если бы я создал надстройку для firefox?

Спасибо!

Ответ 1

Вы можете использовать API chrome.windows для контроля этого. Вы бы добавили слушателя для события 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;
    }
});

Chrome.Window Doc

Ответ 2

Возможно, некоторые не видят комментарий @Giedrius. Этот интервал работает:

window.setInterval(checkBrowserFocus, 1000);  

function checkBrowserFocus(){

    chrome.windows.getCurrent(function(browser){

      console.log(browser.focused)

    })

}

Ответ 3

Да, это делается путем манипулирования событием размытия и фокуса. Как этот пример в 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.');
});