@@ -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