Skip to content

Commit bd16121

Browse files
committed
🎨 修改GM_menu注册同名菜单只使第一个生效
1 parent 3f5085f commit bd16121

File tree

9 files changed

+285
-219
lines changed

9 files changed

+285
-219
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "scriptcat",
3-
"version": "0.7.7",
3+
"version": "0.8.0",
44
"description": "脚本猫,一个可以执行用户脚本的浏览器扩展,万物皆可脚本化,让你的浏览器可以做更多的事情!",
55
"scripts": {
66
"lint": "eslint --ext .js,.ts,.tsx tests/ src/",

src/apps/grant/background.ts

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

src/apps/grant/frontend.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -447,8 +447,11 @@ export class FrontendGrant implements ScriptContext {
447447
@FrontendGrant.GMFunction()
448448
public GM_registerMenuCommand(name: string, listener: () => any, accessKey?: string): number {
449449
const id = randomInt(1, 100000);
450-
this.postRequest('GM_registerMenuCommand', [{ name: name, accessKey: accessKey, id: id }], () => {
451-
listener();
450+
this.postRequest('GM_registerMenuCommand', [{ name: name, accessKey: accessKey, id: id }], (grant: Grant) => {
451+
const data = <{ action: string }>grant.data;
452+
if (data && data.action == 'click') {
453+
listener();
454+
}
452455
});
453456
return id;
454457
}
@@ -531,7 +534,7 @@ export class FrontendGrant implements ScriptContext {
531534
}
532535

533536
@FrontendGrant.GMFunction()
534-
protected GM_getTabs(callback: (objs: { [key: number]: object }) => any): void {
537+
protected GM_getTabs(callback: (objs: { [key: number]: object }) => any): void {
535538
this.postRequest('GM_getTabs', [], (grant: Grant) => {
536539
if (grant.error) {
537540
throw new Error(grant.errorMsg);

src/apps/grant/interface.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ export interface IPostMessage {
2020

2121
export type Api = (grant: Grant, postMessage: IPostMessage, script?: Script) => Promise<any>;
2222

23-
export type FreedCallback = (grant: Grant) => void;
23+
// 资源释放,后台脚本只有脚本id,当窗口是关闭而不是刷新时windowClose为true
24+
// TODO: 实现脚本id
25+
export type FreedCallback = (id: number, tabId?: number, windowClose?: boolean) => void;
2426

2527
export interface IGrantListener {
2628
listen(callback: (msg: any, postMessage: IPostMessage) => Promise<any>): void

0 commit comments

Comments
 (0)