-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathextensionUtils.js
More file actions
124 lines (110 loc) · 3.5 KB
/
extensionUtils.js
File metadata and controls
124 lines (110 loc) · 3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**
* extensionUtils.js
*
* Chrome 扩展管理器的工具函数库。
*
* 本文件包含一套实用功能,用于协助管理 Chrome 扩展的管理器。功能描述如下:
* - 一键启用/禁用所有扩展。
* - 使用快捷键快速启用/禁用扩展。
* - 根据分组批量启用/禁用扩展。
* - 对单个扩展进行启用/禁用操作。
*
* 作者: Liyd
* 创建日期: 2023-10-18
*
* 依赖项:
* - 假设在运行环境中有Chrome API可用。
* - 需要相应函数中提及的DOM元素。
*
* 注意:
* 由于此扩展与 Chrome 扩展API 以及扩展的 HTML 结构紧密相关,确保随时更新以与最新的 API 或结构保持同步。
*/
/**
* 启用或禁用所有扩展。
*
* @param {boolean} enable - true 启用所有扩展,false 禁用所有扩展。
* @param {function} callback - 回调函数。
*/
function enableOrDisableAll(enable, callback) {
chrome.management.getAll(function (extensions) {
// 计算需要处理的扩展数量(不包括自身)
const totalExtensions = extensions.filter(extension => extension.id !== chrome.runtime.id).length;
// 如果没有扩展需要处理,直接调用回调函数
if (totalExtensions === 0) {
if (callback) {
callback();
}
return;
}
let processedExtensions = 0;
extensions.forEach((extension) => {
if (extension.id !== chrome.runtime.id) {
chrome.management.setEnabled(extension.id, enable, function() {
if (chrome.runtime.lastError) {
console.error(chrome.runtime.lastError.message);
}
processedExtensions++;
// 当所有扩展都已处理,调用回调函数
if (processedExtensions === totalExtensions && callback) {
callback();
}
});
}
});
});
}
/**
* 从localStorage中获取插件的分组。
*
* @param {*} extensionId
* @returns
*/
function getGroup(extensionId) {
return localStorage.getItem(extensionId) || "default";
}
/**
* 将插件的分组设置到localStorage中。
*
* @param {*} extensionId
* @param {*} groupName
*/
function setGroup(extensionId, groupName) {
// 如果分组名为"default",则从localStorage中删除插件的分组。
if (groupName === "default") {
localStorage.removeItem(extensionId);
} else {
localStorage.setItem(extensionId, groupName);
}
}
/**
* 根据分组名启用或禁用一组插件。
*
* @param {string} groupName - 分组名。
* @param {boolean} enable - true 启用插件,false 禁用插件。
* @param {function} callback - 回调函数。
*/
function enableOrDisableGroup(groupName, enable, callback) {
chrome.management.getAll(function (extensions) {
// 计算需要处理的扩展数量
const totalExtensions = extensions.filter(extension => getGroup(extension.id) === groupName && extension.id !== chrome.runtime.id).length;
// 如果没有扩展需要处理,直接调用回调函数
if (totalExtensions === 0) {
if (callback) {
callback();
}
return;
}
let processedExtensions = 0;
extensions.forEach((extension) => {
if (getGroup(extension.id) === groupName && extension.id !== chrome.runtime.id) {
chrome.management.setEnabled(extension.id, enable, function() {
processedExtensions++;
// 当所有扩展都已处理,调用回调函数
if (processedExtensions === totalExtensions && callback) {
callback();
}
});
}
});
});
}