Skip to content

Commit 027a460

Browse files
committed
调整代码
1 parent 8c17c8c commit 027a460

7 files changed

Lines changed: 52 additions & 38 deletions

File tree

src/app/repo/scripts.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ export interface ScriptRunResource extends Script {
8484
grantMap: { [key: string]: string };
8585
value: { [key: string]: Value };
8686
flag: string;
87-
executionToken?: string;
8887
resource: { [key: string]: Resource };
8988
sourceCode: string;
9089
}

src/inject.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import LoggerCore from "./app/logger/core";
22
import MessageWriter from "./app/logger/message_writer";
33
import MessageContent from "./app/message/content";
4+
import { type ScriptRunResource } from "./app/repo/scripts";
5+
import { assignExecutionToken } from "./runtime/content/gm_api";
46
import InjectRuntime from "./runtime/content/inject";
57

68
// 通过flag与content建立通讯,这个ScriptFlag是后端注入时候生成的
@@ -17,7 +19,8 @@ const logger = new LoggerCore({
1719
});
1820

1921

20-
message.setHandler("pageLoad", (_action, data) => {
22+
message.setHandler("pageLoad", (_action, data: { scripts: ScriptRunResource[], executionToken?: string }) => {
23+
assignExecutionToken(`${data.executionToken || ""}`);
2124
logger.logger().debug("inject start");
2225
const runtime = new InjectRuntime(message, data.scripts, flag);
2326
runtime.start();

src/runtime/background/gm_api.ts

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -50,28 +50,29 @@ export type Request = MessageRequest & {
5050

5151
export type Api = (request: Request, connect?: Channel) => Promise<any>;
5252

53-
export default class GMApi {
54-
static executionMap = new Map<
55-
string,
56-
{ scriptIds: Set<number>; tabId: number }
57-
>();
58-
59-
static registerScriptExecution(scriptIds: number[], tabId: number) {
60-
const token = uuidv4();
61-
this.executionMap.set(token, {
62-
scriptIds: new Set(scriptIds),
63-
tabId,
64-
});
65-
return token;
66-
}
53+
const executionMap = new Map<
54+
string,
55+
{ scriptIds: Set<number>; tabId: number }
56+
>();
57+
58+
export const registerScriptExecution = (scriptIds: number[], tabId: number): string => {
59+
const token = uuidv4();
60+
executionMap.set(token, {
61+
scriptIds: new Set(scriptIds),
62+
tabId,
63+
});
64+
return token;
65+
};
6766

68-
static removeTabExecutions(tabId: number) {
69-
this.executionMap.forEach((execution, token) => {
70-
if (execution.tabId === tabId) {
71-
this.executionMap.delete(token);
72-
}
73-
});
74-
}
67+
export const removeTabExecutions = (tabId: number) => {
68+
executionMap.forEach((execution, token) => {
69+
if (execution.tabId === tabId) {
70+
executionMap.delete(token);
71+
}
72+
});
73+
};
74+
75+
export default class GMApi {
7576

7677
message: MessageHander;
7778

@@ -191,7 +192,7 @@ export default class GMApi {
191192
if (!request.executionToken) {
192193
throw new Error("script execution is not trusted");
193194
}
194-
const execution = GMApi.executionMap.get(request.executionToken);
195+
const execution = executionMap.get(request.executionToken);
195196
if (!execution || !execution.scriptIds.has(request.scriptId)) {
196197
throw new Error("script execution is not trusted");
197198
}

src/runtime/background/runtime.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import Manager from "@App/app/service/manager";
2929
import Hook from "@App/app/service/hook";
3030
import { i18nName } from "@App/locales/locales";
3131
import { compileInjectScript, compileScriptCode } from "../content/utils";
32-
import GMApi, { type Request } from "./gm_api";
32+
import GMApi, { registerScriptExecution, removeTabExecutions, type Request } from "./gm_api";
3333
import { genScriptMenu } from "./utils";
3434

3535
export type RuntimeEvent = "start" | "stop" | "watchRunStatus";
@@ -285,7 +285,7 @@ export default class Runtime extends Manager {
285285
};
286286
chrome.tabs.onRemoved.addListener((tabId) => {
287287
runScript.delete(tabId);
288-
GMApi.removeTabExecutions(tabId);
288+
removeTabExecutions(tabId);
289289
});
290290
// 给popup页面获取运行脚本,与菜单
291291
this.message.setHandler(
@@ -432,16 +432,18 @@ export default class Runtime extends Manager {
432432
return;
433433
}
434434

435-
const executionToken = GMApi.registerScriptExecution(
435+
const executionToken = registerScriptExecution(
436436
filter.map((script) => script.id),
437437
sender.tabId!
438438
);
439-
const runResources = filter.map((script) => ({
440-
...script,
441-
executionToken,
442-
}));
443439

444-
resolve({ scripts: runResources });
440+
const runResources = filter;
441+
// const runResources = filter.map((script) => ({
442+
// ...script,
443+
// executionToken,
444+
// }));
445+
446+
resolve({ scripts: runResources, executionToken });
445447

446448
// 注入脚本
447449
runResources.forEach((script) => {

src/runtime/content/content.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import MessageContent from "@App/app/message/content";
33
import MessageInternal from "@App/app/message/internal";
44
import { MessageHander, MessageManager } from "@App/app/message/message";
55
import { ScriptRunResource } from "@App/app/repo/scripts";
6+
import { assignExecutionToken } from "./gm_api";
67

78
// content页的处理
89
export default class ContentRuntime {
@@ -18,7 +19,8 @@ export default class ContentRuntime {
1819
this.internalMessage = internalMessage;
1920
}
2021

21-
start(resp: { scripts: ScriptRunResource[] }) {
22+
start(resp: { scripts: ScriptRunResource[], executionToken?: string }) {
23+
assignExecutionToken(`${resp.executionToken || ""}`);
2224
// 由content到background
2325
// 转发gmApi消息
2426
this.contentMessage.setHandler("gmApi", (action, data) => {

src/runtime/content/gm_api.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ import { parseUserConfig } from "@App/pkg/utils/yaml";
1111
import { v4 as uuidv4 } from "uuid";
1212
import { type ValueUpdateData } from "./exec_script";
1313

14+
// content/page 环境的变数,不储存在任何object
15+
let currentExecutionToken = "";
16+
export const assignExecutionToken = (executionToken: string) => {
17+
// content/page 环境 pageLoad 时储存由 background 生成的 executionToken
18+
if (currentExecutionToken) throw new Error("currentExecutionToken cannot be re-assigned");
19+
currentExecutionToken = executionToken;
20+
};
21+
1422
interface ApiParam {
1523
depend?: string[];
1624
listener?: () => void;
@@ -77,7 +85,7 @@ export class GM_Base {
7785
scriptId: this.scriptRes.id,
7886
params,
7987
runFlag: this.runFlag,
80-
executionToken: this.scriptRes.executionToken,
88+
executionToken: currentExecutionToken,
8189
});
8290
}
8391

@@ -91,7 +99,7 @@ export class GM_Base {
9199
scriptId: this.scriptRes.id,
92100
params,
93101
runFlag: this.runFlag,
94-
executionToken: this.scriptRes.executionToken,
102+
executionToken: currentExecutionToken,
95103
});
96104
return channel;
97105
}

src/runtime/gm_api.test.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// gm api 单元测试
22
// 初始化runtime环境
33
import initTestEnv from "@App/pkg/utils/test_utils";
4-
import GMApi from "./background/gm_api";
4+
import GMApi, { registerScriptExecution } from "./background/gm_api";
55
import LoggerCore from "@App/app/logger/core";
66
import MessageCenter from "@App/app/message/center";
77
import { ScriptDAO, ScriptRunResource } from "@App/app/repo/scripts";
@@ -111,7 +111,7 @@ describe("GM execution trust", () => {
111111
});
112112

113113
it("accepts content messages with a matching execution token", async () => {
114-
const executionToken = GMApi.registerScriptExecution([scriptRes.id], 1);
114+
const executionToken = registerScriptExecution([scriptRes.id], 1);
115115
await expect(
116116
backgroundApi.parseRequest(
117117
{
@@ -129,7 +129,6 @@ describe("GM execution trust", () => {
129129
)
130130
).resolves.toMatchObject({
131131
scriptId: scriptRes.id,
132-
executionToken,
133132
});
134133
});
135134
});

0 commit comments

Comments
 (0)