王一之 a8054451ac
Some checks failed
build / Build (push) Failing after 7s
test / Run tests (push) Failing after 8s
inject的GM API调用
2025-04-06 00:32:20 +08:00

49 lines
1.3 KiB
TypeScript

import { ScriptRunResouce } from "@App/app/repo/scripts";
import { Message } from "@Packages/message/server";
import ExecScript from "./exec_script";
import { addStyle, ScriptFunc } from "./utils";
export class InjectRuntime {
execList: ExecScript[] = [];
constructor(
private msg: Message,
private scripts: ScriptRunResouce[]
) {}
start() {
this.scripts.forEach((script) => {
// @ts-ignore
const scriptFunc = window[script.flag];
if (scriptFunc) {
this.execScript(script, scriptFunc);
} else {
// 监听脚本加载,和屏蔽读取
Object.defineProperty(window, script.flag, {
configurable: true,
set: (val: ScriptFunc) => {
this.execScript(script, val);
},
});
}
});
}
execScript(script: ScriptRunResouce, scriptFunc: ScriptFunc) {
// @ts-ignore
delete window[script.flag];
const exec = new ExecScript(script, "content", this.msg, scriptFunc);
this.execList.push(exec);
// 注入css
if (script.metadata["require-css"]) {
script.metadata["require-css"].forEach((val) => {
const res = script.resource[val];
if (res) {
addStyle(res.content);
}
});
}
exec.exec();
}
}