2010-01-27 7 views
39

estoy usando un oyente en el fondo de la página para saber cuando se carga una pestaña:extensiones de Chrome: ¿Cómo saber cuando una ficha ha terminado de cargar, desde el fondo de la página

chrome.tabs.onUpdated.addListener(function (tabId) { }) 

Pero el oyente se dispara dos veces: cuando la página ha comenzado a cargarse, y cuando la página ha terminado. ¿Hay alguna manera de diferenciar los dos casos?

+0

en saber cuándo comienza una pestaña ** ** de carga, ver https: // stackoverflow.com/questions/19191679/chrome-extension-inject-js-before-page-load/19192010#19192010 – Pacerier

Respuesta

61

Afortunadamente hemos encontrado la solución.

Hay una additional parameter que mantiene el valor de estado:

chrome.tabs.onUpdated.addListener(function (tabId , info) { 
    if (info.status === 'complete') { 
    // your code ... 
    } 
}); 

Estado puede ser loading o complete.

+1

No es); falta al final? – Lawand

+1

PS Tenga en cuenta que esto es bueno para las secuencias de comandos de fondo. Para las secuencias de comandos de contenido, simplemente use 'window.onready' –

+1

@PeterEhrlich Problema con Window.onready es que se activa tan pronto como se carga init DOM. Si prueba sitios como gmail que sigue obteniendo datos, se dispara inmediatamente. – Volatil3

5

que quería una manera más fácil de hacer esto después de abrir una pestaña

function createTab (url) { 
    return new Promise(resolve => { 
     chrome.tabs.create({url}, async tab => { 
      chrome.tabs.onUpdated.addListener(function listener (tabId, info) { 
       if (info.status === 'complete' && tabId === tab.id) { 
        chrome.tabs.onUpdated.removeListener(listener); 
        resolve(tab); 
       } 
      }); 
     }); 
    }); 
} 

por lo que sería

let tab = await createTab('http://google.com'); 
Cuestiones relacionadas