0210
Some checks failed
test / Run tests (push) Failing after 13s
build / Build (push) Failing after 22s

This commit is contained in:
2025-02-10 18:10:50 +08:00
parent 1e8b5e6453
commit 36cf8ef5a7
11 changed files with 71 additions and 35 deletions

View File

@ -3,5 +3,9 @@ import { Group } from "@Packages/message/server";
export class GMApi {
constructor(private group: Group) {}
init() {}
init() {
this.group.on("requestXhr", async (data) => {
console.log(data);
});
}
}

View File

@ -1,22 +1,20 @@
import { forwardMessage, Message, Server } from "@Packages/message/server";
import { forwardMessage, MessageSend, Server } from "@Packages/message/server";
import { ScriptService } from "./script";
import { Broker } from "@Packages/message/message_queue";
import { Logger, LoggerDAO } from "@App/app/repo/logger";
import { WindowMessage } from "@Packages/message/window_message";
import { ExtensionMessage } from "@Packages/message/extension_message";
import { ExtensionMessageSend } from "@Packages/message/extension_message";
import { ServiceWorkerClient } from "../service_worker/client";
import { sendMessage } from "@Packages/message/client";
import { GMApi } from "./gm_api";
// offscreen环境的管理器
export class OffscreenManager {
private extensionMessage: Message = new ExtensionMessage("service_worker");
private api: Server = new Server("offscreen", this.extensionMessage);
private extensionMessage: MessageSend = new ExtensionMessageSend("service_worker");
private windowMessage = new WindowMessage(window, sandbox);
private windowApi: Server = new Server("offscreen-window", this.windowMessage);
private windowApi: Server = new Server(this.windowMessage);
private broker: Broker = new Broker(this.extensionMessage);
@ -45,8 +43,7 @@ export class OffscreenManager {
script.init();
// 转发gm api请求
forwardMessage("serviceWorker/runtime/gmApi", this.windowApi, this.extensionMessage);
// 处理gm请求
const gmApi = new GMApi(this.api.group("gmApi"));
const gmApi = new GMApi(this.windowApi.group("gmApi"));
gmApi.init();
// // 处理gm xhr请求

View File

@ -5,7 +5,7 @@ import { Runtime } from "./runtime";
// sandbox环境的管理器
export class SandboxManager {
api: Server = new Server("sandbox", this.windowMessage);
api: Server = new Server(this.windowMessage);
constructor(private windowMessage: WindowMessage) {}

View File

@ -76,12 +76,40 @@ export default class GMApi {
@PermissionVerify.API()
GM_xmlhttpRequest(request: Request, con: MessageConnect) {
console.log("xml", request, con);
console.log("xml request", request, con);
// 先处理unsafe hearder
// 再发送到offscreen, 处理请求
sendMessageToOffsreen("offscreen/gmApi/requestXhr", request.params);
}
start() {
this.group.on("gmApi", this.handlerRequest.bind(this));
}
}
export async function sendMessageToOffsreen(action: string, data?: any) {
// service_worker通过chrome.scripting.executeScript调用window.postMessage主动发送消息
// service_worker和offscreen同时监听消息,会导致消息被两边同时接收,但是返回结果时会产生问题,导致报错
// 不进行监听的话又无法从service_worker主动发送消息
const ctx = await chrome.runtime.getContexts({
contextTypes: [chrome.runtime.ContextType.OFFSCREEN_DOCUMENT],
documentUrls: [chrome.runtime.getURL("src/offscreen.html")],
});
chrome.scripting.executeScript({
target: {
documentIds: [ctx[0]!.documentId!],
tabId: -1,
},
func: (message) => {
// 在页面上下文中执行的代码
window.postMessage(
{
type: "sendMessage",
daat: message,
},
"*"
);
},
args: [{ action, data }],
});
}

View File

@ -12,13 +12,13 @@ export type InstallSource = "user" | "system" | "sync" | "subscribe" | "vscode";
export default class ServiceWorkerManager {
constructor() {}
private api: Server = new Server("service_worker", new ExtensionMessage("service_worker"));
private api: Server = new Server(new ExtensionMessage("service_worker"));
private mq: MessageQueue = new MessageQueue(this.api);
initManager() {
async initManager() {
const group = this.api.group("serviceWorker");
group.on("preparationOffscreen", () => {
group.on("preparationOffscreen", async () => {
// 准备好环境
this.mq.emit("preparationOffscreen", {});
});

View File

@ -2,8 +2,8 @@ import { MessageQueue } from "@Packages/message/message_queue";
import { ScriptEnableCallbackValue } from "./client";
import { Group } from "@Packages/message/server";
import { Script, SCRIPT_STATUS_ENABLE, SCRIPT_TYPE_NORMAL, ScriptAndCode, ScriptDAO } from "@App/app/repo/scripts";
import GMApi from "@App/runtime/service_worker/gm_api";
import { ValueService } from "./value";
import GMApi from "./gm_api";
export class RuntimeService {
scriptDAO: ScriptDAO = new ScriptDAO();