javascript - Manifest V3 服务工作者中的异步代码是否在与其启动位置相同的执行上下文中解析/完成?
问题描述
我的 MV3 扩展中有如下代码:
import _ from 'lodash';
const storageKey = 'state';
let state;
(async () => {
state = await chrome.storage.local.get(storageKey);
listener();
})();
const update = async (data) => {
await chrome.storage.local.set({[storageKey]: data});
}
let lastPick;
const listener = async () => {
const pick = _.pick(state, ...);
if (_.isEqual(pick, lastPick))
return;
lastPick = pick;
...
// do some stuff
}
chrome.storage.onChanged.addListener((changes, area) => {
if (area !== 'local' || !(storageKey in changes))
return;
const {newValue} = changes[storageKey];
state = newValue;
listener();
});
chrome.tabs.onActivated.addListener(async (data) => {
...
update(...);
...
update(...);
...
update(...);
});
使用经典的 Manifest V2 扩展,我可以确定 of 的值lastPick
将始终通过listener
调用(这又由多个调用引起)保持不变,因此不会破坏其中的update
“某些东西”逻辑。listener
但是 Manifest V3,或者更准确地说,它的服务工作者呢?我可以确信上述逻辑不会在那里被打破吗?
解决方案
Do not register listeners asynchronously, as they will not be properly triggered.
希望它对你有用。
推荐阅读
- python - 不同子列表项的可能集合,每个子列表有一个元素
- google-sheets - 不同的分数取决于复选框?
- linux - 从终端运行时 vscode 给出了 Segmentation fault ERROR
- javascript - 用于 InDesign 的 JavaScript,用于提取具有指定和已知段落样式的段落文本
- java - 我一直在为java服务器和客户端做,有什么办法停止避免这种错误并重新启动菜单?
- android - 如何将“{installation home}/bin”添加到您的 PATH 环境变量中,以便您可以从任何目录启动 Android Studio
- scala - 将 Keystore 与 Play 应用程序一起使用的问题
- firebase - Flutter 应用程序中的 Firebase 数据加载速度很慢
- c# - 输出重复和损坏?
- c - 系统日志目录不存在