Проблема обратного вызова / асинхронности JavaScript? Фоновый скрипт расширения Chrome останавливает работу перед завершением

#javascript #google-chrome #google-chrome-extension #callback #google-chrome-devtools

#язык JavaScript #google-chrome #google-chrome-расширение #обратный звонок #google-chrome-devtools

Вопрос:

Я пытаюсь создать небольшой искатель в качестве расширения chrome. Как это работает: Откройте новое окно или вкладку. Выполните поиск в Google / Google News / YouTube по заданным ключевым словам. Храните информацию о результатах в небольшой базе данных

Я впервые создал и протестировал функции с помощью popup.html. Там это работает идеально.Вы нажимаете на кнопку, и все страницы посещаются, а результаты сохраняются в базе данных. Но я хочу запустить программу, ничего не нажимая сначала. Вот почему я перенес его в background.js. Там он также работает, но только в том случае, если открыта консоль Service Worker / DevTool. Только тогда он запускается полностью.

Я был бы признателен за любой полезный ответ.

 const keywords = [  "Keyword1",  "Keyword2",  // ...  "Keyword13" ];  chrome.runtime.onStartup.addListener(() =gt; {  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 =gt; {  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' amp;amp; tab.status == 'complete' amp;amp; 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 -gt; 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 lt; keywords.length) {  openWindow();  } else if (runs == keywords.length) {  chrome.windows.remove(window_id);  } };  

Ответ №1:

Я переключился на манифест версии 2. Тогда я мог бы включить в Background.js через Background.html, которая также продолжается до конца.