2010-04-04 38 views
11

¿Hay alguna manera de averiguar si Google Chrome está enfocado o desenfocado? Estoy creando una aplicación que necesita saber si el usuario está usando el navegador o no.Detectar el foco del navegador/fuera de foco a través de la Extensión de Google Chrome

Al vincular la detección a través del script de contenido en una extensión de Google, he intentado usar desenfoque y enfoque, pero el problema es que al hacer clic en la barra de direcciones también se desencadena un desenfoque. Lo mismo ocurre con la detección del movimiento del mouse, donde no se detectará mover el mouse fuera del área de visualización.

También traté de buscar enFocusChanged, pero parece que solo detecta cambios en las ventanas de cromos, no en aplicaciones fuera de Chrome.

¿Alguien tiene otras ideas para esto? Además, ¿sería esto más fácil si crease un complemento para Firefox?

Gracias!

+0

¿Encontró la respuesta? chrome.window.onFocusChanged no parece estar funcionando – KishanR

Respuesta

1

Sí, esto se hace manipulando el desenfoque y el evento de enfoque. Al igual que este ejemplo de 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.'); 
}); 
6

Puede utilizar la API de chrome.windows para controlar esto. Se podría añadir un detector para el evento onFocusChanged y si el evento regresó -1 o chrome.windows.WINDOW_ID_NONE entonces usted sabe que el navegador pierde el foco:

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

+0

Esta es la respuesta correcta de hoy en día. – JMTyler

+0

Esta debería ser la respuesta correcta por ahora. – Robert

+11

Como se mencionó en la pregunta en sí, onFocusChanged no se activa cuando el usuario navega hacia diferentes aplicaciones, solo funciona cuando el usuario navega entre diferentes ventanas de cromo. Esto significa que no es una solución funcional. El único enfoque que he encontrado hasta ahora es consultar getCurrent en intervalos de vez en cuando y verificar su propiedad enfocada, que es falsa incluso en la ventana actual cuando se enfoca una aplicación diferente. (Esto se ha probado en cromo 39 canary, windows 8) – Giedrius

3

Tal vez algunos no ven comentario @Giedrius'. Este intervalo funciona:

window.setInterval(checkBrowserFocus, 1000); 

function checkBrowserFocus(){ 

    chrome.windows.getCurrent(function(browser){ 

     console.log(browser.focused) 

    }) 

} 
Cuestiones relacionadas