Skip to content

Commit e7a5f20

Browse files
committed
🐛 修复删除脚本依旧在运行的bug
1 parent af09645 commit e7a5f20

File tree

1 file changed

+21
-25
lines changed

1 file changed

+21
-25
lines changed

src/runtime/background/runtime.ts

+21-25
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,9 @@ export default class Runtime extends Manager {
7070

7171
static hook = new Hook<"runStatus">();
7272

73+
// 运行中和开启的后台脚本
74+
runBackScript: Map<number, Script> = new Map();
75+
7376
constructor(
7477
message: MessageHander,
7578
messageSandbox: MessageSandbox,
@@ -126,15 +129,13 @@ export default class Runtime extends Manager {
126129
// 监听脚本运行状态
127130
this.listenScriptRunStatus();
128131

129-
// 运行中和开启的后台脚本
130-
const runBackScript: Map<number, Script> = new Map();
131132
this.scriptDAO.table.toArray((items) => {
132133
items.forEach((item) => {
133134
// 加载所有的脚本
134135
if (item.status === SCRIPT_STATUS_ENABLE) {
135136
this.enable(item);
136137
if (item.type !== SCRIPT_TYPE_NORMAL) {
137-
runBackScript.set(item.id, item);
138+
this.runBackScript.set(item.id, item);
138139
}
139140
} else if (item.type === SCRIPT_TYPE_NORMAL) {
140141
// 只处理未开启的普通页面脚本
@@ -234,29 +235,21 @@ export default class Runtime extends Manager {
234235
genScriptMenu(activeInfo.tabId, scriptMenu);
235236
});
236237

237-
ScriptManager.hook.addListener("enable", (script: Script) => {
238-
// 只处理后台脚本
239-
if (script.type !== SCRIPT_TYPE_NORMAL) {
240-
runBackScript.set(script.id, script);
241-
}
242-
});
243-
ScriptManager.hook.addListener("disable", (script: Script) => {
244-
if (script.type !== SCRIPT_TYPE_NORMAL) {
245-
runBackScript.delete(script.id);
246-
}
247-
});
248-
249238
Runtime.hook.addListener("runStatus", async (scriptId: number) => {
250239
const script = await this.scriptDAO.findById(scriptId);
251240
if (!script) {
252241
return;
253242
}
254-
if (script.status !== SCRIPT_STATUS_ENABLE) {
243+
console.log(script);
244+
if (
245+
script.status !== SCRIPT_STATUS_ENABLE &&
246+
script.runStatus !== "running"
247+
) {
255248
// 没开启并且不是运行中的脚本,删除
256-
runBackScript.delete(scriptId);
249+
this.runBackScript.delete(scriptId);
257250
} else {
258251
// 否则进行一次更新
259-
runBackScript.set(scriptId, script);
252+
this.runBackScript.set(scriptId, script);
260253
}
261254
});
262255

@@ -291,7 +284,7 @@ export default class Runtime extends Manager {
291284
});
292285
const backScriptList: ScriptMenu[] = [];
293286
const sandboxMenuMap = scriptMenu.get("sandbox");
294-
runBackScript.forEach((item) => {
287+
this.runBackScript.forEach((item) => {
295288
const menus: ScriptMenuItem[] = [];
296289
if (sandboxMenuMap) {
297290
sandboxMenuMap?.get(item.id)?.forEach((scriptItem) => {
@@ -469,10 +462,11 @@ export default class Runtime extends Manager {
469462
// 脚本删除
470463
async scriptDelete(script: Script): Promise<boolean> {
471464
// 清理匹配资源
472-
this.match.del(<ScriptRunResouce>script);
473-
this.include.del(<ScriptRunResouce>script);
474-
if (script.status === SCRIPT_STATUS_ENABLE) {
475-
await this.disable(script);
465+
if (script.type === SCRIPT_TYPE_NORMAL) {
466+
this.match.del(<ScriptRunResouce>script);
467+
this.include.del(<ScriptRunResouce>script);
468+
} else {
469+
this.unloadBackgroundScript(script);
476470
}
477471
return Promise.resolve(true);
478472
}
@@ -542,8 +536,9 @@ export default class Runtime extends Manager {
542536
return this.loadPageScript(<ScriptRunResouce>script);
543537
}
544538

545-
// 加载后台脚本
539+
// 加载并启动后台脚本
546540
loadBackgroundScript(script: ScriptRunResouce): Promise<boolean> {
541+
this.runBackScript.set(script.id, script);
547542
return new Promise((resolve, reject) => {
548543
this.messageSandbox
549544
.syncSend("enable", script)
@@ -557,8 +552,9 @@ export default class Runtime extends Manager {
557552
});
558553
}
559554

560-
// 卸载后台脚本
555+
// 卸载并停止后台脚本
561556
unloadBackgroundScript(script: Script): Promise<boolean> {
557+
this.runBackScript.delete(script.id);
562558
return new Promise((resolve, reject) => {
563559
this.messageSandbox
564560
.syncSend("disable", script.id)

0 commit comments

Comments
 (0)