gpt4 book ai didi

javascript - 声明并监听自定义 Chrome Ext 事件

转载 作者:行者123 更新时间:2023-12-03 10:10:37 25 4
gpt4 key购买 nike

我正在尝试通过声明和监听自定义 Chrome 扩展事件来解决 Chrome 扩展功能的异步性质。到目前为止,我还没有找到任何相关的解决方案。

所以,这是我的 background.js 的结构(在 manifest.json 中设置 "persistent": false):

chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.query({active: true, currentWindow: true},
function(tabs) {
//Action 1: chrome.tabs.sendMessage(tabs[0].id, ...
//Action 2: chrome.tabs.sendMessage(tabs[0].id, ...
//Action 3: chrome.tabs.create({url: someUrl, ...
}
)
});

操作 3 只能在操作 12 完成后执行。我在想,在完成其操作后,操作 1 和操作 2 各自发送一个事件,例如 Action1CompleteEventAction2CompleteEvent ,而操作 3 则监听这些事件。一旦检测到两者,它将执行其操作。

这可能吗?有哪些方法可以达到人们一直在使用的相同效果?

感谢您的宝贵时间。

最佳答案

没有办法“绕过”异步性。

每个异步 Chrome API 函数都接受回调参数。保证在操作后调用回调。

因此,您需要链接代码:

chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.query({active: true, currentWindow: true},
function(tabs) {
chrome.tabs.sendMessage(/*...*/, function() {
chrome.tabs.sendMessage(/*...*/, function() {
chrome.tabs.create(/*...*/);
});
});
}
)
});

如果你愿意,你可以尝试雇用Promises ,尽管 Chrome API 本身并不支持它们 - 您需要用一些辅助函数来包装它。这可能会使您的代码更易于管理。

关于javascript - 声明并监听自定义 Chrome Ext 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30128752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com