@@ -70,6 +70,9 @@ export default class Runtime extends Manager {
70
70
71
71
static hook = new Hook < "runStatus" > ( ) ;
72
72
73
+ // 运行中和开启的后台脚本
74
+ runBackScript : Map < number , Script > = new Map ( ) ;
75
+
73
76
constructor (
74
77
message : MessageHander ,
75
78
messageSandbox : MessageSandbox ,
@@ -126,15 +129,13 @@ export default class Runtime extends Manager {
126
129
// 监听脚本运行状态
127
130
this . listenScriptRunStatus ( ) ;
128
131
129
- // 运行中和开启的后台脚本
130
- const runBackScript : Map < number , Script > = new Map ( ) ;
131
132
this . scriptDAO . table . toArray ( ( items ) => {
132
133
items . forEach ( ( item ) => {
133
134
// 加载所有的脚本
134
135
if ( item . status === SCRIPT_STATUS_ENABLE ) {
135
136
this . enable ( item ) ;
136
137
if ( item . type !== SCRIPT_TYPE_NORMAL ) {
137
- runBackScript . set ( item . id , item ) ;
138
+ this . runBackScript . set ( item . id , item ) ;
138
139
}
139
140
} else if ( item . type === SCRIPT_TYPE_NORMAL ) {
140
141
// 只处理未开启的普通页面脚本
@@ -234,29 +235,21 @@ export default class Runtime extends Manager {
234
235
genScriptMenu ( activeInfo . tabId , scriptMenu ) ;
235
236
} ) ;
236
237
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
-
249
238
Runtime . hook . addListener ( "runStatus" , async ( scriptId : number ) => {
250
239
const script = await this . scriptDAO . findById ( scriptId ) ;
251
240
if ( ! script ) {
252
241
return ;
253
242
}
254
- if ( script . status !== SCRIPT_STATUS_ENABLE ) {
243
+ console . log ( script ) ;
244
+ if (
245
+ script . status !== SCRIPT_STATUS_ENABLE &&
246
+ script . runStatus !== "running"
247
+ ) {
255
248
// 没开启并且不是运行中的脚本,删除
256
- runBackScript . delete ( scriptId ) ;
249
+ this . runBackScript . delete ( scriptId ) ;
257
250
} else {
258
251
// 否则进行一次更新
259
- runBackScript . set ( scriptId , script ) ;
252
+ this . runBackScript . set ( scriptId , script ) ;
260
253
}
261
254
} ) ;
262
255
@@ -291,7 +284,7 @@ export default class Runtime extends Manager {
291
284
} ) ;
292
285
const backScriptList : ScriptMenu [ ] = [ ] ;
293
286
const sandboxMenuMap = scriptMenu . get ( "sandbox" ) ;
294
- runBackScript . forEach ( ( item ) => {
287
+ this . runBackScript . forEach ( ( item ) => {
295
288
const menus : ScriptMenuItem [ ] = [ ] ;
296
289
if ( sandboxMenuMap ) {
297
290
sandboxMenuMap ?. get ( item . id ) ?. forEach ( ( scriptItem ) => {
@@ -469,10 +462,11 @@ export default class Runtime extends Manager {
469
462
// 脚本删除
470
463
async scriptDelete ( script : Script ) : Promise < boolean > {
471
464
// 清理匹配资源
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 ) ;
476
470
}
477
471
return Promise . resolve ( true ) ;
478
472
}
@@ -542,8 +536,9 @@ export default class Runtime extends Manager {
542
536
return this . loadPageScript ( < ScriptRunResouce > script ) ;
543
537
}
544
538
545
- // 加载后台脚本
539
+ // 加载并启动后台脚本
546
540
loadBackgroundScript ( script : ScriptRunResouce ) : Promise < boolean > {
541
+ this . runBackScript . set ( script . id , script ) ;
547
542
return new Promise ( ( resolve , reject ) => {
548
543
this . messageSandbox
549
544
. syncSend ( "enable" , script )
@@ -557,8 +552,9 @@ export default class Runtime extends Manager {
557
552
} ) ;
558
553
}
559
554
560
- // 卸载后台脚本
555
+ // 卸载并停止后台脚本
561
556
unloadBackgroundScript ( script : Script ) : Promise < boolean > {
557
+ this . runBackScript . delete ( script . id ) ;
562
558
return new Promise ( ( resolve , reject ) => {
563
559
this . messageSandbox
564
560
. syncSend ( "disable" , script . id )
0 commit comments