我有这个函数,当我的popup.html中的某个按钮被点击时,它就会运行
popup.js
async function execute () {
console.log("Executing...")
const [tab] = await chrome.tabs.query({active: true, currentWindow: true});
let res;
try {
res = await chrome.scripting.executeScript({
target: {tabId: tab.id},
files: ["/src/MainScript.js"],
}, (a) => {
console.log("Done callback?", a)
});
} catch (e) {
return;
}
console.log("Result of script?", res)
}
``` `"Done callback?"` 及 `"Result of script?"` 在我运行后立即打印 `execute()` 所以我认为,它不是等待它的执行完成,而是加载文件🤔
我想执行这个命令 `MainScript.js` 文件并等待其执行完成。该文件如下所示:
mainscript.js
(async function () {
function Main () {
this.run = async function () {
// ...
}
}
const main = new Main();
await main.run();
})()
我想要达到的是,什么时候 `MainScript.js` 完成执行后,我想更改popup.html中的一些样式和元素。
我想知道如何真正等待执行完成,或者从 `MainScript.js` 对于我的popup.js,不管是以何种方式还是其他方式,我对一切都敞开了心扉
编辑
我尝试了消息传递的方法,因为我无法等待清单v3(ty woxxom)中的执行完成:
在…的结尾 `MainScript.js` 我把这个
const main = new Main();
await main.run();
chrome.runtime.sendMessage(myExtensionId, {type: 'processDone', value: true});
然后在 `background.js` 我在听这个消息
chrome.runtime.onMessageExternal.addListener(
function(request, sender, sendResponse) {
console.log("Hello background", request);
// Set loading to false in localStorage...
}
);
侦听器从未被触发,但当我通过控制台手动键入sendmessage时,它会按预期工作,service worker控制台会打印 `"Hello background"` 如何从内容脚本发送消息( `MainScript.js` )给服务人员 `background.js` ??
以防万一,这是我的manifest.json
{
"name": "Extension name",
"description": "Build an Extension!",
"version": "1.0",
"manifest_version": 3,
"background": {
"service_worker": "background.js"
},
"action": {
"default_popup": "popup.html",
"default_icon": "/images/favicon-32x32.png",
"default_title": "Title"
},
"permissions": [
"activeTab",
"tabs",
"webNavigation",
"scripting",
"storage"
],
"externally_connectable": {
"ids": [
"*"
],
"matches": [
"https://.google.com/"
]
},
"host_permissions": [
"http:///", "https:///"
]
}
暂无答案!
目前还没有任何答案,快来回答吧!