Skip to content

Commit ea2e906

Browse files
committed
🐛 修复 early 脚本 GM_info.scriptMetaStr 问题 #801
1 parent c734da4 commit ea2e906

6 files changed

Lines changed: 12 additions & 17 deletions

File tree

src/app/repo/scripts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ export type ScriptAndCode = Script & ScriptCode;
8282

8383
// 脚本运行时的资源,包含已经编译好的脚本与脚本需要的资源
8484
export interface ScriptRunResource extends Script {
85-
code: string;
85+
code: string; // 原始代码
8686
value: { [key: string]: any };
8787
flag: string;
8888
resource: { [key: string]: { base64?: string } & Omit<Resource, "base64"> }; // 资源列表,包含脚本需要的资源

src/app/service/content/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ export function compilePreInjectScript(
106106
const autoDeleteMountCode = autoDeleteMountFunction ? `try{delete window['${script.flag}']}catch(e){}` : "";
107107
return `window['${script.flag}'] = {
108108
scriptInfo: ${JSON.stringify(script)},
109-
func: function(){${autoDeleteMountCode}${scriptCode}}
109+
func: function(){${autoDeleteMountCode}${compileScriptCode(script, scriptCode)}}
110110
}`;
111111
}
112112

src/app/service/service_worker/runtime.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import { sendMessage } from "@Packages/message/client";
2929
import type { CompileScriptCodeResource } from "../content/utils";
3030
import {
3131
compileInjectScriptByFlag,
32-
compileScriptCode,
3332
compileScriptCodeByResource,
3433
getScriptFlag,
3534
isEarlyStartScript,
@@ -304,7 +303,7 @@ export class RuntimeService {
304303

305304
async updateResourceOnScriptChange(script: Script) {
306305
if (script.type !== SCRIPT_TYPE_NORMAL || script.status !== SCRIPT_STATUS_ENABLE) {
307-
throw "Invalid Calling of updateResourceOnScriptChange";
306+
throw new Error("Invalid Calling of updateResourceOnScriptChange");
308307
}
309308
// 安装,启用,或earlyStartScript的value更新
310309
const ret = await this.buildAndSaveCompiledResourceFromScript(script, true);
@@ -645,8 +644,7 @@ export class RuntimeService {
645644

646645
let jsCode = "";
647646
if (withCode) {
648-
const scriptCode = scriptRes.code;
649-
const code = compileInjectionCode(scriptMatchInfo, scriptCode);
647+
const code = compileInjectionCode(scriptRes, scriptRes.code);
650648
registerScript.js[0].code = jsCode = code;
651649
}
652650

@@ -662,7 +660,7 @@ export class RuntimeService {
662660
const scriptUrlPatterns = scriptMatchInfo.scriptUrlPatterns;
663661
const originalUrlPatterns = scriptMatchInfo.originalUrlPatterns;
664662
const result = {
665-
flag: scriptMatchInfo.flag,
663+
flag: scriptRes.flag,
666664
name: script.name,
667665
require: resourceUrls, // 仅储存url
668666
uuid: script.uuid,
@@ -682,15 +680,14 @@ export class RuntimeService {
682680
return { compiledResource: result, jsCode, apiScript: registerScript };
683681
}
684682

683+
// 从CompiledResource中还原脚本代码
685684
async restoreJSCodeFromCompiledResource(script: Script, result: CompiledResource) {
686685
const earlyScript = isEarlyStartScript(script.metadata);
687686
// 如果是预加载脚本,需要另外的处理方式
688687
if (earlyScript) {
689688
const scriptRes = await this.script.buildScriptRunResource(script);
690689
if (!scriptRes) return "";
691-
const scriptMatchInfo = await this.applyScriptMatchInfo(scriptRes);
692-
if (!scriptMatchInfo) return "";
693-
return compileInjectionCode(scriptMatchInfo, scriptRes.code);
690+
return compileInjectionCode(scriptRes, scriptRes.code);
694691
}
695692

696693
const originalCode = await this.script.scriptCodeDAO.get(result.uuid);
@@ -1141,8 +1138,7 @@ export class RuntimeService {
11411138
const scriptRes = scriptsWithUpdatedResources.get(targetUUID);
11421139
const scriptDAOCode = scriptCodes[targetUUID];
11431140
if (scriptRes && scriptDAOCode) {
1144-
const scriptCode = compileScriptCode(scriptRes, scriptDAOCode);
1145-
const scriptInjectCode = compileInjectionCode(scriptRes, scriptCode);
1141+
const scriptInjectCode = compileInjectionCode(scriptRes, scriptDAOCode);
11461142
scriptRegisterInfo.js = [
11471143
{
11481144
code: scriptInjectCode,
@@ -1301,7 +1297,7 @@ export class RuntimeService {
13011297
}
13021298

13031299
/**
1304-
* applyScriptMatchInfo 会进行 scriptMatch 的更新
1300+
* applyScriptMatchInfo 对脚本进行URL匹配信息的处理
13051301
*/
13061302
async applyScriptMatchInfo(scriptRes: ScriptRunResource) {
13071303
const o = scriptURLPatternResults(scriptRes);

src/app/service/service_worker/script.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import { type IMessageQueue } from "@Packages/message/message_queue";
2626
import { createScriptInfo, type ScriptInfo, type InstallSource } from "@App/pkg/utils/scriptInstall";
2727
import { type ResourceService } from "./resource";
2828
import { type ValueService } from "./value";
29-
import { compileScriptCode, isEarlyStartScript } from "../content/utils";
29+
import { isEarlyStartScript } from "../content/utils";
3030
import { type SystemConfig } from "@App/pkg/config/config";
3131
import { localePath } from "@App/locales/locales";
3232
import { arrayMove } from "@dnd-kit/sortable";
@@ -530,7 +530,6 @@ export class ScriptService {
530530
ret.value = value;
531531
ret.resource = resource;
532532
ret.code = code.code;
533-
ret.code = compileScriptCode(ret);
534533
return ret;
535534
});
536535
}

src/app/service/service_worker/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export type SearchType = "auto" | "name" | "script_code";
1212
* 脚本匹配信息。
1313
* 扩展自 ScriptRunResource。
1414
*/
15-
export interface ScriptMatchInfo extends ScriptRunResource {
15+
export interface ScriptMatchInfo extends Script {
1616
/** 已被自定义覆盖的 UrlPatterns */
1717
scriptUrlPatterns: URLRuleEntry[];
1818
/** 脚本原本的 UrlPatterns */

src/app/service/service_worker/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ export function parseScriptLoadInfo(script: ScriptRunResource): ScriptLoadInfo {
178178
};
179179
}
180180

181-
export function compileInjectionCode(scriptRes: ScriptLoadInfo | ScriptMatchInfo, scriptCode: string) {
181+
export function compileInjectionCode(scriptRes: ScriptRunResource, scriptCode: string) {
182182
const preDocumentStartScript = isEarlyStartScript(scriptRes.metadata);
183183
let scriptInjectCode;
184184
if (preDocumentStartScript) {

0 commit comments

Comments
 (0)