Skip to content

Commit 860f2aa

Browse files
authored
ver: update to v1.8.73 (#37)
# v1.8.73(含迭代内容) ## 主要改动 ### 1. 功能增强 - ✅ 菜单功能完善 - 添加浏览器拓展右键菜单 - ✅ 重构 Service Worker 初始化逻辑: - **统一初始化入口**:创建了单一的 `initialize` 函数,用于处理扩展安装、浏览器启动和 Service Worker 意外重启时的状态恢复,确保了逻辑的一致性。 - **实现懒加载守卫**:引入 `ensureInitialized` 机制,在处理 `onMessage`、`onUpdated` 等事件前检查并确保初始化已完成,防止因 Service Worker 休眠后重启导致的状态丢失问题。 - ✅ 修复并发与竞态问题: - **引入互斥机制**:为 `updateHeaderRules` 添加 Promise 队列,确保规则更新操作串行执行,避免并发调用导致的状态不一致 - **防抖合并请求**:实现短时间内相同语言切换请求的自动合并,减少不必要的API调用和日志 - **优化缓存策略**:改进 `rulesCache` 机制,自动切换也能安全使用短路返回,因为规则仅由本扩展管理 - **状态同步增强**:确保 `lastAppliedLanguage` 和 `rulesCache` 在并发场景下的一致性 - ✅ 性能优化 - 修复自动切换时的无效更新与性能浪费问题,通过改进缓存检查逻辑避免不必要的 API 调用 ### 2. 代码优化 - ✅ 清理无效代码 - 去除无效变量 err - ✅ 重构 createContextMenusOnce 使用 async/await(Promise API),符合代码规范 - ✅ 右键菜单统一使用英文,去除 i18n 化(简化实现) - ✅ 简化URL检查条件 - ✅ 优化动态规则ID数组创建逻辑,采用 `.some()` 方法以兼顾性能与代码表现力 - ✅ 将 `updateHeaderRules` 拆分为外部包装器和内部实现,提供更好的并发控制 - ✅ 修复重试逻辑中的递归调用问题,避免绕过并发控制机制,优化错误处理 - ✅ 优化按钮代码 - ✅ 优化 Chrome API 调用方式,移除不必要的 Promise 包装,直接使用 async/await - ✅ 重构调试 UI 的代码结构,将回调函数改为 async/await 方式,调整了部分变量和函数的命名,移除冗余的代码 - ✅ 优化多处异步操作并移除错误处理冗余 ### 3. Bug 修复 - ✅ 修复 `tabs.onUpdated` 过滤条件 Bug,该 Bug 会导致 http 页面不触发自动切换 - ✅ 修复动态规则清理范围过宽问题,现在只移除与 `RULE_ID` 相关的规则,避免误删其他动态规则。 ## 文件变更清单 ### 新增文件 - Problems.md - LLM整理的现存问题(v1.8.67) - Wiki_EN.md - 英文版Wiki(v1.8.69) ### 重命名文件 - ### 修改文件 - manifest.json - 版本号更新(v1.8.67、v1.8.68、v1.8.69、v1.8.70、v1.8.71、v1.8.72、v1.8.73);添加 contextMenus 权限(v1.8.67) - TODO.md - 修改待办事项(v1.8.67) - Update.md - 版本更新记录(v1.8.67、v1.8.68、v1.8.69、v1.8.70、v1.8.71、v1.8.72、v1.8.73) - background.js - 添加右键菜单初始化标志(v1.8.67);重构 contextMenus 创建逻辑(async/await),右键菜单统一使用英文,去除 i18n 化(v1.8.68);修复 `tabs.onUpdated` 的 URL 过滤条件 Bug(v1.8.68);简化URL检查条件(v1.8.68);重构了初始化和事件处理逻辑(v1.8.69);修复动态规则清理范围过宽问题(v1.8.70);优化动态规则ID数组创建逻辑(v1.8.70);引入并发控制机制,添加 Promise 队列和防抖机制,修复并发与竞态问题(v1.8.71);优化异步操作并移除错误处理冗余(v1.8.73); 修复自动切换时的无效更新与性能浪费问题(v1.8.73) - shared-i18n-base.js - 优化翻译加载机制,避免重复加载脚本文件,完善翻译回退(v1.8.68) - I18n_Usage_Guide.md - 内容更新(v1.8.67、v1.8.68) - .gitignore - git忽略文件更新(v1.8.67) - Problems.md - 问题列表更新(v1.8.68、v1.8.69、v1.8.70、v1.8.71、v1.8.73) - Wiki.md - Wiki更新(v1.8.69、v1.8.70) - Wiki_EN.md - 英文Wiki更新(v1.8.70) - i18n/background-*.js - 完善相关翻译(v1.8.71、v1.8.73) - toggle.js - 优化按钮代码(v1.8.71) - popup.js - 优化 Chrome API 调用方式,直接使用 async/await(v1.8.72);优化按钮处理逻辑为event事件处理(v1.8.73) - debug-ui.js - 优化代码结构,将回调函数改为 async/await 方式,调整了部分变量和函数的命名,移除冗余的代码(v1.8.72) - shared-utils.js - 完善fallback翻译键(v1.8.72) - Code_Style_Guide.md - 代码风格指南更新(v1.8.72) - shared-update-checker.js - 优化异步操作并移除错误处理冗余(v1.8.73) - domain-rules-manager.js - 优化异步操作并移除错误处理冗余(v1.8.73) ### 移除内容 - 移除未使用的变量 chrome.runtime.lastError 读取语句 - 已完成的TODO / 已修复的问题 - 将 `performInitialization` 和 `handleAutoSwitchToggleRequest` 中的重复规则应用逻辑提取到新的共享函数 `applyLanguageRulesBasedOnState` 中 - 移除大量prromise包装
2 parents 3467418 + cc5eeff commit 860f2aa

9 files changed

Lines changed: 67 additions & 118 deletions

File tree

background.js

Lines changed: 25 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,27 @@ const updateHeaderRulesInternal = async (language, retryCount = 0, isAutoSwitch
203203
language = language ? language.trim() : DEFAULT_LANG_EN;
204204

205205
// 优化的缓存检查:对所有调用(包括自动切换)都进行短路检查
206-
if (language === lastAppliedLanguage && rulesCache) {
207-
const logMessage = isAutoSwitch
208-
? backgroundI18n.t('auto_switch_skip_duplicate', { language })
209-
: backgroundI18n.t('language_already_set', { language });
210-
sendBackgroundLog(logMessage, 'info');
211-
return { status: 'cached', language };
206+
if (language === lastAppliedLanguage && rulesCache && rulesCache.length > 0) {
207+
// 验证缓存中确实存在对应的规则
208+
const existingRule = rulesCache.find(rule =>
209+
rule.id === RULE_ID &&
210+
rule.action.requestHeaders &&
211+
rule.action.requestHeaders.some(header =>
212+
header.header === 'Accept-Language' &&
213+
header.value === language
214+
)
215+
);
216+
217+
if (existingRule) {
218+
const logMessage = isAutoSwitch
219+
? backgroundI18n.t('auto_switch_skip_duplicate', { language })
220+
: backgroundI18n.t('language_already_set', { language });
221+
sendBackgroundLog(logMessage, 'info');
222+
return { status: 'cached', language };
223+
} else {
224+
// 语言相同但缓存中没有对应规则,记录警告并继续处理
225+
sendBackgroundLog(backgroundI18n.t('cache_empty_but_language_same', { language }), 'warning');
226+
}
212227
}
213228

214229
sendBackgroundLog(`${backgroundI18n.t('trying_update_rules', { language })}${retryCount > 0 ? ` (${backgroundI18n.t('retry')} #${retryCount})` : ''}`, 'info');
@@ -361,15 +376,7 @@ const performInitialization = async (reason) => {
361376
sendBackgroundLog(backgroundI18n.t('domain_rules_loaded'), 'info');
362377

363378
// 2. 从存储中获取设置
364-
const result = await new Promise((resolve, reject) => {
365-
chrome.storage.local.get(['currentLanguage', 'autoSwitchEnabled'], (result) => {
366-
if (chrome.runtime.lastError) {
367-
reject(new Error(chrome.runtime.lastError.message));
368-
return;
369-
}
370-
resolve(result);
371-
});
372-
});
379+
const result = await chrome.storage.local.get(['currentLanguage', 'autoSwitchEnabled']);
373380
autoSwitchEnabled = result.autoSwitchEnabled !== false; // 默认为 true
374381
sendBackgroundLog(`${backgroundI18n.t('loaded_auto_switch_status')}: ${autoSwitchEnabled}`, 'info');
375382

@@ -573,15 +580,7 @@ const handleGetCurrentLangRequest = async (sendResponse) => {
573580
const currentRule = rules.find(rule => rule.id === RULE_ID);
574581
const actualCurrentLang = currentRule?.action?.requestHeaders?.find(h => h.header === 'Accept-Language')?.value;
575582

576-
const result = await new Promise((resolve, reject) => {
577-
chrome.storage.local.get(['currentLanguage', 'autoSwitchEnabled'], (result) => {
578-
if (chrome.runtime.lastError) {
579-
reject(new Error(chrome.runtime.lastError.message));
580-
return;
581-
}
582-
resolve(result);
583-
});
584-
});
583+
const result = await chrome.storage.local.get(['currentLanguage', 'autoSwitchEnabled']);
585584
if (typeof sendResponse === 'function') {
586585
sendResponse({
587586
currentLanguage: actualCurrentLang || result.currentLanguage || lastAppliedLanguage,
@@ -1107,16 +1106,8 @@ const handleGetDynamicRulesRequest = async (sendResponse) => {
11071106
*/
11081107
const handleGetMatchedRulesRequest = async (sendResponse) => {
11091108
try {
1110-
const matchedRules = await new Promise((resolve, reject) => {
1111-
chrome.declarativeNetRequest.getMatchedRules({}, (result) => {
1112-
if (chrome.runtime.lastError) {
1113-
reject(new Error(chrome.runtime.lastError.message));
1114-
return;
1115-
}
1116-
resolve(result);
1117-
});
1118-
});
1119-
1109+
const matchedRules = await chrome.declarativeNetRequest.getMatchedRules({});
1110+
11201111
if (typeof sendResponse === 'function') {
11211112
sendResponse({
11221113
success: true,

docs/Problems.md

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,6 @@
1+
中优先级问题与建议
12

2-
1. 初始化/存储 API 使用不一致
3-
4-
- 现状:
5-
- 代码中混用 Promise 风格 await chrome.storage.local.get(['key']) 与基于回调的 new Promise((resolve) => chrome.storage.local.get(...))。
6-
- 风险:风格不一致增加维护成本,且更难统一错误处理/超时控制。
7-
- 建议:统一使用 Promise 风格(MV3 已支持),并集中封装存取(带默认值、错误分类、日志记录)。
8-
9-
中优先级问题与建议
10-
11-
2. 自动切换时的无效更新与性能浪费
12-
13-
- 现状:
14-
- 自动切换路径即使当前语言与目标相同,也会调用 updateHeaderRules 再走一遍 getDynamicRules 检查,最后返回“unchanged”。这在频繁 tab 更新时浪费一次 API 调用。
15-
- 建议:若 lastAppliedLanguage === targetLanguage 则直接早退(自动切换也可安全短路)。如担心外部修改,可以增加“低频校验”。
16-
17-
3. DNR 资源类型与匹配范围
3+
1. DNR 资源类型与匹配范围
184

195
- 现状:
206
- 规则 `condition.urlFilter: "*"``resourceTypes` 包含大量类型。
@@ -24,28 +10,28 @@
2410
- 收窄 `resourceTypes` 至会携带 Accept-Language 的类型:`main_frame``sub_frame``xmlhttprequest`(基本可覆盖 fetch/XHR),如需谨慎可保留 script/`image` 等是否冗余评估。
2511
- 如果能接受仅针对 http/https,可通过 `regexFilter` 或规则集合减少歧义(可选)。
2612

27-
4. SW 日志与 i18n 加载顺序
13+
2. SW 日志与 i18n 加载顺序
2814

2915
- 现状:
3016
- DomainRulesManager 依赖全局 domainManagerI18n,注释称 shared-i18n-base.js 已在 background.js 通过 importScripts 加载(未在审查片段中直接看到)。
3117
- 风险:若加载顺序变更或未来重构为 ESM,可能造成 i18n 未就绪。
3218
- 建议:在 background.js 顶部保证导入顺序:shared-i18n-base.js -> i18n/*-i18n.js -> 其他模块;或在 DomainRulesManager 内对 i18n 缺失做好降级处理(已有,但建议保证顺序)。
3319

34-
5. 域名规则加载的健壮性
20+
3. 域名规则加载的健壮性
3521

3622
- 现状:
3723
- domain-rules.json 使用 fetch(getURL(..)),无超时/重试;失败时返回空规则。
3824
- 建议:
3925
- 为规则文件加载增加超时与有限重试;失败时可设置“只使用 TLD 兜底”或“直接走 fallback 语言,不自动切换”策略,避免误判。
4026

41-
6. 自定义规则变更的缓存失效
27+
4. 自定义规则变更的缓存失效
4228

4329
- 现状:
44-
- 存在自定义规则加载逻辑与缓存(domainCache、parsedDomainCache),但未见自定义规则更新后自动清理/失效缓存的路径。
30+
- 存在自定义规则加载逻辑与缓存(domainCache、parsedDomainCache),但未见"自定义规则更新后自动清理/失效缓存"的路径。
4531
- 建议:
4632
- 在写入/修改自定义规则后调用 clearCache(true) 或精细化失效,避免旧缓存导致匹配不生效。
4733

48-
7. 更新检查与网络权限
34+
5. 更新检查与网络权限
4935

5036
- 现状:
5137
- UpdateChecker 针对 GitHub Releases 有完善的超时/重试/降级;但对 host_permissions 声明不明(MV3 中 extension pages 跨域 fetch 通常允许,但建议最小权限)。
@@ -54,27 +40,27 @@
5440

5541
低优先级/可读性与维护性
5642

57-
8. 消息处理 return true 一致性
43+
6. 消息处理 return true 一致性
5844

5945
- 现状:
60-
46+
6147
- onMessage 的分支大多 `return true` 以保持异步响应。请确保新增消息类型也保持一致,避免响应丢失。
6248

63-
9. 命名与常量集中
64-
49+
7. 命名与常量集中
50+
6551

6652
- 建议:
67-
53+
6854
- 将 RULE_ID、默认语言(DEFAULT_LANG_EN, DEFAULT_LANG_ZH)、重试常量、缓存大小等集中到 `shared/constants.js`,便于统一修改。
6955

70-
10. 统一日志接口
71-
56+
8. 统一日志接口
57+
7258

7359
- 建议:
74-
60+
7561
- sendBackgroundLog 很好用;建议统一所有 console.log/warn/error 入口(尤其 Service Worker 侧),便于开关调试等级与搜集问题。
7662

77-
11. 文档与注释
63+
9. 文档与注释
7864

7965

8066
- 建议:
@@ -101,7 +87,7 @@ MV3 合规检查(重点项)
10187
- LRU 实现正确(基于 Map 插入顺序;重复键先删后设;满容量淘汰首个)。
10288
- maxCacheSize=100 保守,合理。可考虑曝光为设置或根据内存占用自适应。
10389
- 命中率统计简洁;考虑在日志中周期性输出以便调优。
104-
- 中枢路径上尽量减少 getDynamicRules 调用频率(见问题 3)。
90+
- 中枢路径上尽量减少 getDynamicRules 调用频率(见问题 2)。
10591

10692
i18n 与回退
10793

@@ -126,8 +112,6 @@ i18n 与回退
126112

127113
可操作修复清单(按优先级)
128114

129-
130-
- 统一 chrome.storage Promise 风格;封装读写方法。
131115
- 收窄 DNR `resourceTypes`
132116
- 自定义规则更新后清理/失效缓存。
133117
- 为 domain-rules.json 加超时/重试(或只在首次失败时 fallback 并上报日志)。

docs/Update.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# v1.8.72(含迭代内容)
1+
# v1.8.73(含迭代内容)
22

33
## 主要改动
44

@@ -13,6 +13,7 @@
1313
- **防抖合并请求**:实现短时间内相同语言切换请求的自动合并,减少不必要的API调用和日志
1414
- **优化缓存策略**:改进 `rulesCache` 机制,自动切换也能安全使用短路返回,因为规则仅由本扩展管理
1515
- **状态同步增强**:确保 `lastAppliedLanguage``rulesCache` 在并发场景下的一致性
16+
- ✅ 性能优化 - 修复自动切换时的无效更新与性能浪费问题,通过改进缓存检查逻辑避免不必要的 API 调用
1617

1718
### 2. 代码优化
1819

@@ -26,6 +27,7 @@
2627
- ✅ 优化按钮代码
2728
- ✅ 优化 Chrome API 调用方式,移除不必要的 Promise 包装,直接使用 async/await
2829
- ✅ 重构调试 UI 的代码结构,将回调函数改为 async/await 方式,调整了部分变量和函数的命名,移除冗余的代码
30+
- ✅ 优化多处异步操作并移除错误处理冗余
2931

3032
### 3. Bug 修复
3133

@@ -45,22 +47,24 @@
4547

4648
### 修改文件
4749

48-
- manifest.json - 版本号更新(v1.8.67、v1.8.68、v1.8.69、v1.8.70、v1.8.71、v1.8.72);添加 contextMenus 权限(v1.8.67)
50+
- manifest.json - 版本号更新(v1.8.67、v1.8.68、v1.8.69、v1.8.70、v1.8.71、v1.8.72、v1.8.73);添加 contextMenus 权限(v1.8.67)
4951
- TODO.md - 修改待办事项(v1.8.67)
50-
- Update.md - 版本更新记录(v1.8.67、v1.8.68、v1.8.69、v1.8.70、v1.8.71、v1.8.72)
51-
- background.js - 添加右键菜单初始化标志(v1.8.67);重构 contextMenus 创建逻辑(async/await),右键菜单统一使用英文,去除 i18n 化(v1.8.68);修复 `tabs.onUpdated` 的 URL 过滤条件 Bug(v1.8.68);简化URL检查条件(v1.8.68);重构了初始化和事件处理逻辑(v1.8.69);修复动态规则清理范围过宽问题(v1.8.70);优化动态规则ID数组创建逻辑(v1.8.70);引入并发控制机制,添加 Promise 队列和防抖机制,修复并发与竞态问题(v1.8.71)
52+
- Update.md - 版本更新记录(v1.8.67、v1.8.68、v1.8.69、v1.8.70、v1.8.71、v1.8.72、v1.8.73
53+
- background.js - 添加右键菜单初始化标志(v1.8.67);重构 contextMenus 创建逻辑(async/await),右键菜单统一使用英文,去除 i18n 化(v1.8.68);修复 `tabs.onUpdated` 的 URL 过滤条件 Bug(v1.8.68);简化URL检查条件(v1.8.68);重构了初始化和事件处理逻辑(v1.8.69);修复动态规则清理范围过宽问题(v1.8.70);优化动态规则ID数组创建逻辑(v1.8.70);引入并发控制机制,添加 Promise 队列和防抖机制,修复并发与竞态问题(v1.8.71);优化异步操作并移除错误处理冗余(v1.8.73); 修复自动切换时的无效更新与性能浪费问题(v1.8.73)
5254
- shared-i18n-base.js - 优化翻译加载机制,避免重复加载脚本文件,完善翻译回退(v1.8.68)
5355
- I18n_Usage_Guide.md - 内容更新(v1.8.67、v1.8.68)
5456
- .gitignore - git忽略文件更新(v1.8.67)
55-
- Problems.md - 问题列表更新(v1.8.68、v1.8.69、v1.8.70)
57+
- Problems.md - 问题列表更新(v1.8.68、v1.8.69、v1.8.70、v1.8.71、v1.8.73
5658
- Wiki.md - Wiki更新(v1.8.69、v1.8.70)
5759
- Wiki_EN.md - 英文Wiki更新(v1.8.70)
58-
- i18n/background-*.js - 完善相关翻译(v1.8.71)
60+
- i18n/background-*.js - 完善相关翻译(v1.8.71、v1.8.73
5961
- toggle.js - 优化按钮代码(v1.8.71)
60-
- popup.js - 优化 Chrome API 调用方式,直接使用 async/await(v1.8.72)
62+
- popup.js - 优化 Chrome API 调用方式,直接使用 async/await(v1.8.72);优化按钮处理逻辑为event事件处理(v1.8.73)
6163
- debug-ui.js - 优化代码结构,将回调函数改为 async/await 方式,调整了部分变量和函数的命名,移除冗余的代码(v1.8.72)
6264
- shared-utils.js - 完善fallback翻译键(v1.8.72)
6365
- Code_Style_Guide.md - 代码风格指南更新(v1.8.72)
66+
- shared-update-checker.js - 优化异步操作并移除错误处理冗余(v1.8.73)
67+
- domain-rules-manager.js - 优化异步操作并移除错误处理冗余(v1.8.73)
6468

6569
### 移除内容
6670

domain-rules-manager.js

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -578,15 +578,7 @@ class DomainRulesManager {
578578
*/
579579
async getCustomRules() {
580580
try {
581-
const result = await new Promise((resolve, reject) => {
582-
chrome.storage.local.get(['customDomainRules'], (result) => {
583-
if (chrome.runtime.lastError) {
584-
reject(new Error(chrome.runtime.lastError.message));
585-
return;
586-
}
587-
resolve(result);
588-
});
589-
});
581+
const result = await chrome.storage.local.get(['customDomainRules']);
590582
return result.customDomainRules || {};
591583
} catch (error) {
592584
const i18n = this.ensureI18n();

i18n/background-en.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ if (typeof backgroundEn === 'undefined') {
104104
// Concurrency control related keys
105105
"merging_duplicate_request": "Merging duplicate language switch request: {language}",
106106
"auto_switch_skip_duplicate": "Auto-switch skipping duplicate language: {language}",
107-
"concurrency_state_reset": "Concurrency control state has been reset"
107+
"concurrency_state_reset": "Concurrency control state has been reset",
108+
"cache_empty_but_language_same": "Cache empty but language same: {language}, continuing processing"
108109

109110
};
110111
} // 结束 if (typeof backgroundEn === 'undefined') 检查

i18n/background-zh.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ if (typeof backgroundZh === 'undefined') {
104104
// 并发控制相关翻译键
105105
"merging_duplicate_request": "合并重复的语言切换请求: {language}",
106106
"auto_switch_skip_duplicate": "自动切换跳过重复语言: {language}",
107-
"concurrency_state_reset": "并发控制状态已重置"
107+
"concurrency_state_reset": "并发控制状态已重置",
108+
"cache_empty_but_language_same": "缓存为空但语言相同: {language},继续处理"
108109

109110
};
110111
} // 结束 if (typeof backgroundZh === 'undefined') 检查

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"manifest_version": 3,
33
"name": "MultiLangSwitcher",
4-
"version": "1.8.72",
4+
"version": "1.8.73",
55
"minimum_chrome_version": "88.0",
66
"description": "__MSG_extension_description__",
77
"default_locale": "zh",

popup.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -679,7 +679,7 @@ const showUpdateNotification = (updateInfo) => {
679679
scheduleDOMUpdate(() => {
680680
updateNotification.classList.add('d-none');
681681
});
682-
}, 6000));
682+
}, 5000));
683683

684684
} else if (updateInfo.updateAvailable) {
685685
// 有可用更新
@@ -998,17 +998,17 @@ document.addEventListener('DOMContentLoaded', async () => {
998998
lastApplyTime: 0,
999999

10001000
// 自动切换开关变更处理
1001-
autoSwitchChange: async () => {
1002-
const enabled = this.checked;
1001+
autoSwitchChange: async (event) => {
1002+
const enabled = event.target.checked;
10031003
const success = await setAutoSwitchStatus(enabled);
10041004
if (success) {
10051005
updateAutoSwitchUI(enabled, autoSwitchToggle, languageSelect, applyButton);
10061006
}
10071007
},
10081008

10091009
// 语言选择框获得焦点处理
1010-
languageSelectFocus: () => {
1011-
this.size = 6;
1010+
languageSelectFocus: (event) => {
1011+
event.target.size = 6;
10121012
sendDebugLog(popupI18n.t('language_select_focus'), 'info');
10131013
},
10141014

shared/shared-update-checker.js

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -564,15 +564,7 @@ class UpdateChecker {
564564
};
565565

566566
// 保存到本地存储
567-
await new Promise((resolve, reject) => {
568-
chrome.storage.local.set({ [this.cacheKey]: cacheData }, () => {
569-
if (chrome.runtime.lastError) {
570-
reject(new Error(chrome.runtime.lastError.message));
571-
} else {
572-
resolve();
573-
}
574-
});
575-
});
567+
await chrome.storage.local.set({ [this.cacheKey]: cacheData });
576568

577569
sendLocalizedUpdateLog('update_info_cached_persistently', {}, 'info');
578570
} catch (error) {
@@ -593,15 +585,7 @@ class UpdateChecker {
593585

594586
try {
595587
// 从本地存储获取缓存数据
596-
const result = await new Promise((resolve, reject) => {
597-
chrome.storage.local.get([this.cacheKey], (result) => {
598-
if (chrome.runtime.lastError) {
599-
reject(new Error(chrome.runtime.lastError.message));
600-
} else {
601-
resolve(result);
602-
}
603-
});
604-
});
588+
const result = await chrome.storage.local.get([this.cacheKey]);
605589

606590
const cacheData = result[this.cacheKey];
607591
if (!cacheData) {
@@ -648,15 +632,7 @@ class UpdateChecker {
648632

649633
try {
650634
// 从本地存储移除缓存
651-
await new Promise((resolve, reject) => {
652-
chrome.storage.local.remove([this.cacheKey], () => {
653-
if (chrome.runtime.lastError) {
654-
reject(new Error(chrome.runtime.lastError.message));
655-
} else {
656-
resolve();
657-
}
658-
});
659-
});
635+
await chrome.storage.local.remove([this.cacheKey]);
660636

661637
sendLocalizedUpdateLog('persistent_cache_cleared', {}, 'info');
662638
} catch (error) {

0 commit comments

Comments
 (0)