Обнаружение фокуса браузера/вне фокуса с помощью расширения 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.');
});