Estoy tratando de crear un pequeño rastreador como una extensión de Chrome. Cómo funciona es: Abre una nueva ventana o pestaña. Realice una búsqueda de Google / Google News / YouTube con las palabras clave dadas. Almacenar información de los resultados en una pequeña base de datos
Primero creé y probé las funciones con un popup.html. Allí funciona perfectamente. Haces clic en un botón y se visitan todas las páginas y los resultados se almacenan en una base de datos. Pero quiero iniciar el programa sin hacer clic en nada primero. Por eso lo migré a background.js. Allí también funciona, pero solo si la consola Service Worker / DevTool está abierta. Solo entonces funciona completamente.
Agradecería cualquier respuesta útil.
const keywords = [ "Keyword1", "Keyword2", // ... "Keyword13" ]; chrome.runtime.onStartup.addListener(() => { chrome.tabs.onUpdated.addListener(loadingWindow); openWindow(); }); // Opens new Window or Tab with the correct URL function openWindow() { chrome.tabs.onUpdated.addListener(loadingWindow); if (runs == 0) { chrome.windows.create({ url: getUrl(keywords[runs]), type: "normal" }, newWindow => { window_id = newWindow.id; }); } else { chrome.tabs.update(tab_id, { url: getUrl(keywords[runs]) }); } } // Wait to load the new tab function loadingWindow(tabId, changeInfo, tab) { if (changeInfo.status === 'complete' && tab.status == 'complete' && tab.windowId == window_id) { tab_id = tabId; console.log(tab.windowId); chrome.tabs.onUpdated.removeListener(loadingWindow); chrome.tabs.sendMessage(tab.id, { text: source }, doStuffWithDom); } }; // Get information from content script -> payload and then send to database function doStuffWithDom(domContent) { let payload = {... } var data = new FormData(); data.append("json", JSON.stringify(payload)); fetch(".../store.php", { method: "POST", body: data }); crawlDone(); } // open new window / tab or close the open window function crawlDone() { runs++; if (runs < keywords.length) { openWindow(); } else if (runs == keywords.length) { chrome.windows.remove(window_id); } };Cambié a la versión 2 de Manifest. Luego podría incluir Background.js a través de Background.html, que también se ejecuta hasta el final.