JavaScript 回调/异步问题? Chrome 扩展程序的后台脚本在完成之前停止功能
Posted
技术标签:
【中文标题】JavaScript 回调/异步问题? Chrome 扩展程序的后台脚本在完成之前停止功能【英文标题】:JavaScript callback / async problem? Background script of Chrome Extension stops function before finishing 【发布时间】:2022-01-06 12:26:53 【问题描述】:我正在尝试创建一个小型爬虫作为 chrome 扩展。它的工作原理是: 打开新窗口或标签。 使用给定的关键字搜索 Google / Google News / YouTube。 将结果信息存储在小型数据库中
我首先使用 popup.html 创建并测试了这些函数。它在那里完美运行。您单击一个按钮,所有页面都被访问,结果存储在数据库中。但我想在不先点击任何东西的情况下启动程序。这就是我将它迁移到 background.js 的原因。它也可以在那里工作,但前提是 Service Worker / DevTool 控制台是打开的。只有这样它才能完全运行。
如果有任何有用的答案,我将不胜感激。
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);
;
【问题讨论】:
【参考方案1】:我切换到 Manifest 版本 2。然后我可以通过 Background.html 包含 Background.js,它也运行到最后。
【讨论】:
以上是关于JavaScript 回调/异步问题? Chrome 扩展程序的后台脚本在完成之前停止功能的主要内容,如果未能解决你的问题,请参考以下文章
Javascript - 在这个例子中异步并行的回调发生了啥?