2010-04-04 9 views
11

C'è un modo per scoprire se Google Chrome è a fuoco o fuori fuoco? Sto creando un'app che deve sapere se l'utente sta attualmente utilizzando il browser o meno.Rileva focus del browser/sfocato tramite l'estensione Google Chrome

Collegando il rilevamento tramite lo script di contenuto in un'estensione Google, ho provato a utilizzare sfocatura e messa a fuoco, ma il problema è che facendo clic sulla barra degli indirizzi viene attivato anche un evento di sfocatura. Lo stesso vale per il rilevamento del movimento del mouse, in cui non è possibile rilevare il movimento del mouse all'esterno dell'area di visualizzazione.

Ho anche provato a guardare su FocusChanged ma sembra che rilevi solo cambiamenti nelle finestre di Chromi e non in quelle di Chrome.

Qualcuno ha altre idee per questo? Inoltre, sarebbe più semplice se avessi creato un add-on per firefox?

Grazie!

+0

Hai trovato la risposta? chrome.window.onFocusChanged sembra non funzionare – KishanR

risposta

1

Sì, questo viene fatto manipolando l'evento sfocatura e messa a fuoco. come in questo esempio in 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

È possibile utilizzare il chrome.windows API per monitorare questo. Si potrebbe aggiungere un listener per l'evento onFocusChanged e se l'evento restituito -1 o chrome.windows.WINDOW_ID_NONE poi si sa che il browser ha perso fuoco:

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

Questa è la risposta corretta dei giorni nostri. – JMTyler

+0

Questa dovrebbe essere la risposta corretta per ora. – Robert

+11

Come è stato menzionato nella domanda stessa, onFocusChanged non viene attivato quando l'utente naviga su una diversa applicazione, funziona solo quando l'utente naviga tra le diverse finestre di Chrome. Ciò significa che non è una soluzione funzionante. L'unico approccio che ho trovato fino ad ora è di interrogare getCurrent a intervalli ogni tanto e controllare la sua proprietà focalizzata che è falsa anche sulla finestra corrente quando è messa a fuoco un'applicazione diversa. (Questo è testato su Chrome 39 canarino, Windows 8) – Giedrius

3

Forse alcuni non si veda il commento @Giedrius'. Questo intervallo funziona:

window.setInterval(checkBrowserFocus, 1000); 

function checkBrowserFocus(){ 

    chrome.windows.getCurrent(function(browser){ 

     console.log(browser.focused) 

    }) 

} 
Problemi correlati