Quiero detectar en un script de fondo de extensión de Chrome cuál es la pestaña activa del navegador con enfoque, si corresponde.
Tengo el siguiente código que funciona en casi todos los casos. Sin embargo, si restauro una aplicación minimizada (p. ej., Outlook) que oculta la ventana del navegador, el evento onFocusChange no se activa.
chrome.windows.onFocusChanged.addListener((windowId) => { console.log('On focus change: ' + windowId); handleActiveTab(); }); chrome.tabs.onActivated.addListener((e) => { console.log('On activated', e); handleActiveTab(); }); chrome.tabs.onUpdated.addListener((e) => { console.log('On updated', e); handleActiveTab(); }); const handleActiveTab = () => { chrome.tabs.query({ active: true, currentWindow: true, lastFocusedWindow: true }, function (tabs) { if (tabs[0]) { chrome.windows.get(tabs[0].windowId, (w) => { if (w && w.focused) { console.log('ACTIVE TAB -> ' + tabs[0].url); } else { console.log('ACTIVE TAB WITHOUT FOCUS -> ' + tabs[0].url); } }); } else { console.log('NO ACTIVE TAB'); } }); }; Si llamo a mi handleActiveTab con un temporizador, detecta que la pestaña del navegador perdió el foco. La propiedad window.focused cambia. Pero, ¿por qué no se dispara el evento onFocusChanged ?
Como solución alternativa, puedo usar la solución con un temporizador, pero me gustaría evitarlo si es posible.