@@ -10,6 +10,7 @@ import {
1010 SCRIPT_TYPE_NORMAL ,
1111 ScriptDAO ,
1212 ScriptRunResouce ,
13+ SCRIPT_RUN_STATUS_RUNNING ,
1314} from "@App/app/repo/scripts" ;
1415import ResourceManager from "@App/app/service/resource/manager" ;
1516import ValueManager from "@App/app/service/value/manager" ;
@@ -48,6 +49,7 @@ export type ScriptMenu = {
4849 runStatus ?: SCRIPT_RUN_STATUS ;
4950 runNum : number ;
5051 menus ?: ScriptMenuItem [ ] ;
52+ customExclude ?: string [ ] ;
5153} ;
5254
5355// 后台脚本将会将代码注入到沙盒中
@@ -69,6 +71,9 @@ export default class Runtime extends Manager {
6971
7072 include : UrlInclude < ScriptRunResouce > = new UrlInclude ( ) ;
7173
74+ // 自定义排除
75+ customizeExclude : UrlMatch < ScriptRunResouce > = new UrlMatch ( ) ;
76+
7277 static hook = new Hook < "runStatus" > ( ) ;
7378
7479 // 运行中和开启的后台脚本
@@ -258,7 +263,7 @@ export default class Runtime extends Manager {
258263 number ,
259264 Map < number , { script : Script ; runNum : number } >
260265 > ( ) ;
261- const addRunScript = ( tabId : number , script : Script ) => {
266+ const addRunScript = ( tabId : number , script : Script , num : number = 1 ) => {
262267 let scripts = runScript . get ( tabId ) ;
263268 if ( ! scripts ) {
264269 scripts = new Map ( ) ;
@@ -270,7 +275,7 @@ export default class Runtime extends Manager {
270275 scripts . set ( script . id , scriptNum ) ;
271276 }
272277 if ( script . status === SCRIPT_STATUS_ENABLE ) {
273- scriptNum . runNum += 1 ;
278+ scriptNum . runNum += num ;
274279 }
275280 } ;
276281 chrome . tabs . onRemoved . addListener ( ( tabId ) => {
@@ -279,12 +284,19 @@ export default class Runtime extends Manager {
279284 // 给popup页面获取运行脚本,与菜单
280285 this . message . setHandler (
281286 "queryPageScript" ,
282- async ( action : string , { tabId } : any ) => {
287+ async ( action : string , { url , tabId } : any ) => {
283288 const tabMap = scriptMenu . get ( tabId ) ;
284- const matchScripts = runScript . get ( tabId ) || [ ] ;
285- const allPromise : Promise < ScriptMenu > [ ] = Array . from (
286- matchScripts ,
287- async ( [ , item ] : [ number , { script : Script ; runNum : number } ] ) => {
289+ const run = runScript . get ( tabId ) ;
290+ let matchScripts = [ ] ;
291+ if ( ! run ) {
292+ matchScripts = this . matchUrl ( url ) . map ( ( item ) => {
293+ return { runNum : 0 , script : item } ;
294+ } ) ;
295+ } else {
296+ matchScripts = Array . from ( run . values ( ) ) ;
297+ }
298+ const allPromise : Promise < ScriptMenu > [ ] = matchScripts . map (
299+ async ( item ) => {
288300 const menus : ScriptMenuItem [ ] = [ ] ;
289301 if ( tabMap ) {
290302 tabMap . get ( item . script . id ) ?. forEach ( ( scriptItem ) => {
@@ -306,6 +318,8 @@ export default class Runtime extends Manager {
306318 updatetime : item . script . updatetime || item . script . createtime ,
307319 hasUserConfig : ! ! item . script . config ,
308320 runNum : item . runNum ,
321+ customExclude :
322+ item . script . selfMetadata && item . script . selfMetadata . exclude ,
309323 menus,
310324 } ;
311325 }
@@ -316,6 +330,7 @@ export default class Runtime extends Manager {
316330 updatetime : script . updatetime || script . createtime ,
317331 hasUserConfig : ! ! script ?. config ,
318332 runNum : item . runNum ,
333+ customExclude : script . selfMetadata && script . selfMetadata . exclude ,
319334 menus,
320335 } ;
321336 }
@@ -338,14 +353,18 @@ export default class Runtime extends Manager {
338353 } ) ;
339354 } ) ;
340355 }
356+
341357 backScriptList . push ( {
342358 id : item . id ,
343359 name : item . name ,
344360 enable : item . status === SCRIPT_STATUS_ENABLE ,
345361 updatetime : item . updatetime || item . createtime ,
346362 runStatus : item . runStatus ,
347363 hasUserConfig : ! ! item . config ,
348- runNum : item . status === SCRIPT_STATUS_ENABLE ? 1 : 0 ,
364+ runNum :
365+ item . runStatus && item . runStatus !== SCRIPT_RUN_STATUS_RUNNING
366+ ? 1
367+ : 0 ,
349368 menus,
350369 } ) ;
351370 } ) ;
@@ -371,6 +390,11 @@ export default class Runtime extends Manager {
371390 // 清理之前的数据
372391 runScript . delete ( sender . tabId ) ;
373392 }
393+ const exclude = this . customizeExclude . match ( sender . url ) ;
394+ // 自定义排除的
395+ exclude . forEach ( ( val ) => {
396+ addRunScript ( sender . tabId ! , val , 0 ) ;
397+ } ) ;
374398 const filter : ScriptRunResouce [ ] = this . matchUrl (
375399 sender . url ,
376400 ( script ) => {
@@ -579,6 +603,15 @@ export default class Runtime extends Manager {
579603 }
580604 } ) ;
581605 }
606+ if ( script . selfMetadata && script . selfMetadata . exclude ) {
607+ script . selfMetadata . exclude . forEach ( ( url ) => {
608+ try {
609+ this . customizeExclude . add ( url , script ) ;
610+ } catch ( e ) {
611+ logger . error ( "url加载错误" , Logger . E ( e ) ) ;
612+ }
613+ } ) ;
614+ }
582615 return Promise . resolve ( true ) ;
583616 }
584617
0 commit comments