@@ -46,6 +46,7 @@ export type ScriptMenu = {
4646 updatetime : number ;
4747 hasUserConfig : boolean ;
4848 runStatus ?: SCRIPT_RUN_STATUS ;
49+ runNum : number ;
4950 menus ?: ScriptMenuItem [ ] ;
5051} ;
5152
@@ -252,17 +253,45 @@ export default class Runtime extends Manager {
252253 }
253254 } ) ;
254255
256+ // 记录运行次数与iframe运行
257+ const runScript = new Map <
258+ number ,
259+ Map < number , { script : Script ; runNum : number } >
260+ > ( ) ;
261+ const addRunScript = ( tabId : number , script : Script ) => {
262+ let scripts = runScript . get ( tabId ) ;
263+ if ( ! scripts ) {
264+ scripts = new Map ( ) ;
265+ runScript . set ( tabId , scripts ) ;
266+ }
267+ let scriptNum = scripts . get ( script . id ) ;
268+ if ( ! scriptNum ) {
269+ scriptNum = { script, runNum : 0 } ;
270+ scripts . set ( script . id , scriptNum ) ;
271+ }
272+ if ( script . status === SCRIPT_STATUS_ENABLE ) {
273+ scriptNum . runNum += 1 ;
274+ }
275+ } ;
276+ chrome . tabs . onUpdated . addListener ( ( tabId , changeInfo ) => {
277+ if ( changeInfo . status === "loading" ) {
278+ runScript . delete ( tabId ) ;
279+ }
280+ } ) ;
281+ chrome . tabs . onRemoved . addListener ( ( tabId ) => {
282+ runScript . delete ( tabId ) ;
283+ } ) ;
255284 // 给popup页面获取运行脚本,与菜单
256285 this . message . setHandler (
257286 "queryPageScript" ,
258- ( action : string , { url , tabId } : any ) => {
287+ ( action : string , { tabId } : any ) => {
259288 const tabMap = scriptMenu . get ( tabId ) ;
260- const matchScripts = this . matchUrl ( url ) ;
289+ const matchScripts = runScript . get ( tabId ) || [ ] ;
261290 const scriptList : ScriptMenu [ ] = [ ] ;
262291 matchScripts . forEach ( ( item ) => {
263292 const menus : ScriptMenuItem [ ] = [ ] ;
264293 if ( tabMap ) {
265- tabMap . get ( item . id ) ?. forEach ( ( scriptItem ) => {
294+ tabMap . get ( item . script . id ) ?. forEach ( ( scriptItem ) => {
266295 menus . push ( {
267296 name : scriptItem . request . params [ 1 ] ,
268297 accessKey : scriptItem . request . params [ 2 ] ,
@@ -273,11 +302,12 @@ export default class Runtime extends Manager {
273302 } ) ;
274303 }
275304 scriptList . push ( {
276- id : item . id ,
277- name : item . name ,
278- enable : item . status === SCRIPT_STATUS_ENABLE ,
279- updatetime : item . updatetime || item . createtime ,
280- hasUserConfig : ! ! item . config ,
305+ id : item . script . id ,
306+ name : item . script . name ,
307+ enable : item . script . status === SCRIPT_STATUS_ENABLE ,
308+ updatetime : item . script . updatetime || item . script . createtime ,
309+ hasUserConfig : ! ! item . script . config ,
310+ runNum : item . runNum ,
281311 menus,
282312 } ) ;
283313 } ) ;
@@ -303,6 +333,7 @@ export default class Runtime extends Manager {
303333 updatetime : item . updatetime || item . createtime ,
304334 runStatus : item . runStatus ,
305335 hasUserConfig : ! ! item . config ,
336+ runNum : item . status === SCRIPT_STATUS_ENABLE ? 1 : 0 ,
306337 menus,
307338 } ) ;
308339 } ) ;
@@ -328,11 +359,16 @@ export default class Runtime extends Manager {
328359 const filter : ScriptRunResouce [ ] = this . matchUrl (
329360 sender . url ,
330361 ( script ) => {
331- // 开启并且不是iframe
332- return (
333- script . status !== SCRIPT_STATUS_ENABLE ||
334- ( sender . frameId !== undefined && ! ! script . metadata . noframes )
335- ) ;
362+ // 如果是iframe,判断是否允许在iframe里运行
363+ if ( sender . frameId !== undefined ) {
364+ if ( script . metadata . noframes ) {
365+ return false ;
366+ }
367+ addRunScript ( sender . tabId ! , script ) ;
368+ return script . status === SCRIPT_STATUS_ENABLE ;
369+ }
370+ addRunScript ( sender . tabId ! , script ) ;
371+ return script . status === SCRIPT_STATUS_ENABLE ;
336372 }
337373 ) ;
338374
0 commit comments