2010-04-04 9 views
11

Gibt es eine Möglichkeit herauszufinden, ob Google Chrome scharf oder unscharf ist? Ich erstelle eine App, die wissen muss, ob der Benutzer gerade den Browser verwendet oder nicht.Erkennen von Browserfokussierung/unscharf über Google Chrome Extension

Indem ich die Erkennung durch das Inhaltsskript in einer Google-Erweiterung gebunden habe, habe ich versucht, Unschärfe und Fokus zu verwenden, aber das Problem ist, dass ein Klick auf die Adressleiste auch ein Unschärfeereignis auslöst. Das Gleiche gilt für die Erkennung von Mausbewegungen, bei denen das Bewegen der Maus außerhalb des Anzeigebereichs nicht erkannt wird.

Ich habe auch versucht, onFocusChanged zu betrachten, aber es scheint nur Änderungen in Chrome-Fenstern nicht Apps außerhalb von Chrome erkannt.

Hat jemand andere Ideen dafür? Wäre das auch einfacher, wenn ich stattdessen ein Add-On für Firefox erstellen würde?

Danke!

+0

Haben Sie die Antwort gefunden? chrome.window.onFocusChanged scheint nicht zu funktionieren – KishanR

Antwort

1

Ja, dies geschieht durch Manipulieren des Weichzeichner- und Fokusereignisses. Wie dieses Beispiel 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

können Sie die chrome.windows API verwenden, um dies zu überwachen. Sie würden einen Listener für das onFocusChanged Ereignis hinzufügen und wenn das Ereignis -1 oder chrome.windows.WINDOW_ID_NONE zurückgegeben, dann wissen Sie, dass der Browser den Fokus verloren:

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

Dies ist die heutige richtige Antwort. – JMTyler

+0

Dies sollte jetzt die richtige Antwort sein. – Robert

+11

Wie in der Frage selbst erwähnt, wird onFocusChanged nicht ausgelöst, wenn der Benutzer zu einer anderen Anwendung navigiert, sondern nur, wenn der Benutzer zwischen verschiedenen Chromfenstern navigiert. Dies bedeutet, dass es keine funktionierende Lösung ist. Der einzige Ansatz, den ich bisher gefunden habe, ist getCurrent ab und zu in Intervallen abzufragen und seine fokussierte Eigenschaft zu überprüfen, die auch im aktuellen Fenster falsch ist, wenn verschiedene Anwendungen im Fokus sind. (Dies ist auf Chrom 39 Kanarienvogel getestet, Windows 8) – Giedrius

3

Vielleicht Kommentar einige nicht sehen @Giedrius. Dieses Intervall funktioniert:

window.setInterval(checkBrowserFocus, 1000); 

function checkBrowserFocus(){ 

    chrome.windows.getCurrent(function(browser){ 

     console.log(browser.focused) 

    }) 

} 
Verwandte Themen