Some checks failed
build / Build (push) Failing after 7s
test / Run tests (push) Failing after 8s
49 lines
1.3 KiB
TypeScript
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();
|
|
}
|
|
}
|