@@ -365,6 +365,18 @@ export class BackgroundGrant {
365365 }
366366
367367 public listenScriptGrant ( ) {
368+ chrome . tabs . onRemoved . addListener ( ( tabId ) => {
369+ BackgroundGrant . freedCallback . forEach ( v => {
370+ v ( 0 , tabId , true )
371+ } ) ;
372+ } ) ;
373+ chrome . tabs . onUpdated . addListener ( ( tabId , info ) => {
374+ if ( info . status == 'loading' && ! info . url ) {
375+ BackgroundGrant . freedCallback . forEach ( v => {
376+ v ( 0 , tabId , false )
377+ } ) ;
378+ }
379+ } ) ;
368380 this . listener . listen ( ( msg , postMessage ) => {
369381 return new Promise ( resolve => {
370382 const grant = < Grant > msg ;
@@ -379,7 +391,7 @@ export class BackgroundGrant {
379391 if ( grant . value == 'CAT_runComplete' || ( grant . value == 'CAT_setRunError' && grant . params [ 0 ] ) ) {
380392 //执行完毕,释放资源
381393 BackgroundGrant . freedCallback . forEach ( v => {
382- v ( grant ) ;
394+ v ( grant . id , grant . tabId ) ;
383395 } ) ;
384396 }
385397 resolve ( result ) ;
@@ -638,8 +650,7 @@ export class BackgroundGrant {
638650 data . push ( { storeId : val . id } ) ;
639651 }
640652 } ) ;
641- grant . data = { type : 'done' , data : data } ;
642- post . postMessage ( grant ) ;
653+ resolve ( { type : 'done' , data : data } ) ;
643654 } ) ;
644655 return ;
645656 }
@@ -664,8 +675,7 @@ export class BackgroundGrant {
664675 url : detail . url ,
665676 storeId : detail . storeId ,
666677 } , ( cookies ) => {
667- grant . data = { type : 'done' , data : cookies } ;
668- post . postMessage ( grant ) ;
678+ resolve ( { type : 'done' , data : cookies } ) ;
669679 } ) ;
670680 break ;
671681 }
@@ -678,8 +688,7 @@ export class BackgroundGrant {
678688 url : detail . url ,
679689 storeId : detail . storeId ,
680690 } , ( ) => {
681- grant . data = { type : 'done' , data : [ ] } ;
682- post . postMessage ( grant ) ;
691+ resolve ( { type : 'done' , data : [ ] } ) ;
683692 } ) ;
684693 break ;
685694 }
@@ -698,8 +707,7 @@ export class BackgroundGrant {
698707 secure : detail . secure ,
699708 storeId : detail . storeId ,
700709 } , ( ) => {
701- grant . data = { type : 'done' , data : [ ] } ;
702- post . postMessage ( grant ) ;
710+ resolve ( { type : 'done' , data : [ ] } ) ;
703711 } ) ;
704712 break ;
705713 }
@@ -973,8 +981,8 @@ export class BackgroundGrant {
973981
974982 @BackgroundGrant . GMFunction ( {
975983 background : true ,
976- freed : ( grant : Grant ) => {
977- BackgroundGrant . freedProxy ( grant . id ) ;
984+ freed : ( id : number ) => {
985+ BackgroundGrant . freedProxy ( id ) ;
978986 }
979987 } )
980988 protected CAT_setProxy ( grant : Grant , post : IPostMessage ) : Promise < any > {
@@ -1087,6 +1095,9 @@ export class BackgroundGrant {
10871095 menu . post . postMessage ( menu . grant ) ;
10881096 }
10891097 } ) ;
1098+ } ,
1099+ freed : ( ) => {
1100+ console . log ( ) ;
10901101 }
10911102 } )
10921103 public GM_registerMenuCommand ( grant : Grant , post : IPostMessage ) : Promise < any > {
@@ -1124,7 +1135,7 @@ export class BackgroundGrant {
11241135
11251136
11261137 @BackgroundGrant . GMFunction ( { } )
1127- public GM_unregisterMenuCommand ( grant : Grant , post : IPostMessage ) : Promise < any > {
1138+ public GM_unregisterMenuCommand ( grant : Grant ) : Promise < any > {
11281139 return new Promise ( resolve => {
11291140 grant . params [ 0 ] . scriptId = grant . id ;
11301141 if ( grant . tabId ) {
@@ -1145,13 +1156,13 @@ export class BackgroundGrant {
11451156 public static tabDatas = new Map < number , Map < number , any > > ( ) ;
11461157
11471158 @BackgroundGrant . GMFunction ( {
1148- freed : ( grant : Grant ) => {
1149- const datas = BackgroundGrant . tabDatas . get ( grant . id ) ;
1159+ freed : ( id , tabId , windowClose ) => {
1160+ const datas = BackgroundGrant . tabDatas . get ( id ) ;
11501161 if ( ! datas ) {
11511162 return
11521163 }
1153- if ( grant . tabId ) {
1154- datas . delete ( grant . tabId ) ;
1164+ if ( tabId && windowClose ) {
1165+ datas . delete ( tabId ) ;
11551166 } else {
11561167 datas . delete ( 0 ) ;
11571168 }
0 commit comments