Skip to content

Commit e765476

Browse files
committed
🐛 修复GM_getValue与GM_info问题 #393
1 parent f698722 commit e765476

6 files changed

Lines changed: 33 additions & 17 deletions

File tree

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.17.0-beta.1",
3+
"version": "0.17.0-beta.2",
44
"description": "脚本猫,一个可以执行用户脚本的浏览器扩展,万物皆可脚本化,让你的浏览器可以做更多的事情!",
55
"author": "CodFrm",
66
"license": "GPLv3",

src/app/service/content/exec_script.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { ScriptRunResouce } from "@App/app/repo/scripts";
44
import GMApi from "./gm_api";
55
import { compileScript, createContext, proxyContext, ScriptFunc } from "./utils";
66
import { Message } from "@Packages/message/server";
7-
import { EmitEventRequest } from "../service_worker/runtime";
7+
import { PageLoadScript, ScriptMatchInfo } from "../service_worker/runtime";
88

99
export type ValueUpdateSender = {
1010
runFlag: string;
@@ -24,7 +24,7 @@ export class RuntimeMessage {}
2424

2525
// 执行脚本,控制脚本执行与停止
2626
export default class ExecScript {
27-
scriptRes: ScriptRunResouce;
27+
scriptRes: PageLoadScript;
2828

2929
scriptFunc: ScriptFunc;
3030

@@ -37,7 +37,7 @@ export default class ExecScript {
3737
GM_info: any;
3838

3939
constructor(
40-
scriptRes: ScriptRunResouce,
40+
scriptRes: PageLoadScript,
4141
envPrefix: "content" | "offscreen",
4242
message: Message,
4343
code: string | ScriptFunc,

src/app/service/content/exec_warp.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { ScriptRunResouce } from "@App/app/repo/scripts";
22
import ExecScript from "./exec_script";
33
import { Message } from "@Packages/message/server";
4+
import { PageLoadScript } from "../service_worker/runtime";
45

56
export class CATRetryError {
67
msg: string;
@@ -22,7 +23,7 @@ export class BgExecScriptWarp extends ExecScript {
2223

2324
setInterval: Map<number, boolean>;
2425

25-
constructor(scriptRes: ScriptRunResouce, message: Message) {
26+
constructor(scriptRes: PageLoadScript, message: Message) {
2627
const thisContext: { [key: string]: any } = {};
2728
const setTimeout = new Map<number, any>();
2829
const setInterval = new Map<number, any>();

src/app/service/content/gm_api.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { connect, sendMessage } from "@Packages/message/client";
99
import EventEmitter from "eventemitter3";
1010
import { getStorageName } from "@App/pkg/utils/utils";
1111
import { MessageRequest } from "../service_worker/gm_api";
12+
import { PageLoadScript, ScriptMatchInfo } from "../service_worker/runtime";
1213

1314
interface ApiParam {
1415
depend?: string[];
@@ -112,9 +113,7 @@ export default class GMApi {
112113
}
113114

114115
// 获取脚本信息和管理器信息
115-
static GM_info(script: ScriptRunResouce) {
116-
const metadataStr = getMetadataStr(script.code);
117-
const userConfigStr = getUserConfigStr(script.code) || "";
116+
static GM_info(script: PageLoadScript) {
118117
const options = {
119118
description: script.metadata.description?.[0] || null,
120119
matches: script.metadata.match || [],
@@ -123,7 +122,7 @@ export default class GMApi {
123122
"run-in": script.metadata["run-in"] || [],
124123
icon: script.metadata.icon?.[0] || null,
125124
icon64: script.metadata.icon64?.[0] || null,
126-
header: metadataStr,
125+
header: script.metadataStr,
127126
grant: script.metadata.grant || [],
128127
connects: script.metadata.connect || [],
129128
};
@@ -134,9 +133,9 @@ export default class GMApi {
134133
scriptWillUpdate: true,
135134
scriptHandler: "ScriptCat",
136135
scriptUpdateURL: script.downloadUrl,
137-
scriptMetaStr: metadataStr,
138-
userConfig: parseUserConfig(userConfigStr),
139-
userConfigStr,
136+
scriptMetaStr: script.metadataStr,
137+
userConfig: parseUserConfig(script.userConfigStr),
138+
userConfigStr: script.userConfigStr,
140139
// scriptSource: script.sourceCode,
141140
version: ExtVersion,
142141
script: {
@@ -154,7 +153,7 @@ export default class GMApi {
154153
@GMContext.API()
155154
public GM_getValue(key: string, defaultValue?: any) {
156155
const ret = this.scriptRes.value[key];
157-
if (ret) {
156+
if (ret !== undefined) {
158157
return ret;
159158
}
160159
return defaultValue;

src/app/service/service_worker/runtime.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import { SystemConfig } from "@App/pkg/config/config";
2727
import { ResourceService } from "./resource";
2828
import { LocalStorageDAO } from "@App/app/repo/localStorage";
2929
import Logger from "@App/app/logger/logger";
30+
import { getMetadataStr, getUserConfigStr } from "@App/pkg/utils/script";
3031

3132
// 为了优化性能,存储到缓存时删除了code、value与resource
3233
export interface ScriptMatchInfo extends ScriptRunResouce {
@@ -35,6 +36,11 @@ export interface ScriptMatchInfo extends ScriptRunResouce {
3536
customizeExcludeMatches: string[];
3637
}
3738

39+
export interface PageLoadScript extends ScriptMatchInfo {
40+
metadataStr: string; // 脚本元数据字符串
41+
userConfigStr: string; // 用户配置字符串
42+
}
43+
3844
export interface EmitEventRequest {
3945
uuid: string;
4046
event: string;
@@ -346,10 +352,9 @@ export class RuntimeService {
346352
return arr;
347353
}
348354
}
349-
// 获取value
350-
arr.push(scriptRes);
355+
arr.push(scriptRes as PageLoadScript);
351356
return arr;
352-
}, [] as ScriptMatchInfo[]);
357+
}, [] as PageLoadScript[]);
353358

354359
await Promise.all([
355360
// 加载value
@@ -362,6 +367,16 @@ export class RuntimeService {
362367
const resource = await this.resource.getScriptResources(script);
363368
script.resource = resource;
364369
}),
370+
// 加载code相关的信息
371+
...enableScript.map(async (script) => {
372+
const code = await this.scriptDAO.scriptCodeDAO.get(script.uuid);
373+
if (code) {
374+
const metadataStr = getMetadataStr(code.code) || "";
375+
const userConfigStr = getUserConfigStr(code.code) || "";
376+
script.metadataStr = metadataStr;
377+
script.userConfigStr = userConfigStr;
378+
}
379+
}),
365380
]);
366381

367382
this.mq.emit("pageLoad", {
@@ -479,6 +494,7 @@ export class RuntimeService {
479494
scriptMatch[key] = val;
480495
// 优化性能,将不需要的信息去掉
481496
// 而且可能会超过缓存的存储限制
497+
// @ts-ignore
482498
scriptMatch[key].code = "";
483499
scriptMatch[key].value = {};
484500
scriptMatch[key].resource = {};

src/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"manifest_version": 3,
33
"name": "__MSG_scriptcat__",
4-
"version": "0.17.0.1200",
4+
"version": "0.17.0.1300",
55
"author": "CodFrm",
66
"description": "__MSG_scriptcat_description__",
77
"options_ui": {

0 commit comments

Comments
 (0)