This commit is contained in:
王一之 2025-02-13 18:04:34 +08:00
parent fcf9f6fd63
commit 3d869643b4
3 changed files with 9 additions and 9 deletions

View File

@ -4,6 +4,7 @@ import { Script, ScriptDAO } from "@App/app/repo/scripts";
import { Group, MessageConnect, MessageSender } from "@Packages/message/server"; import { Group, MessageConnect, MessageSender } from "@Packages/message/server";
import { ValueService } from "@App/app/service/service_worker/value"; import { ValueService } from "@App/app/service/service_worker/value";
import PermissionVerify from "./permission_verify"; import PermissionVerify from "./permission_verify";
import { ServiceWorkerMessageSend } from "@Packages/message/window_message";
// GMApi,处理脚本的GM API调用请求 // GMApi,处理脚本的GM API调用请求
@ -30,6 +31,7 @@ export default class GMApi {
constructor( constructor(
private group: Group, private group: Group,
private sender: ServiceWorkerMessageSend,
private value: ValueService private value: ValueService
) { ) {
this.logger = LoggerCore.logger().with({ service: "runtime/gm_api" }); this.logger = LoggerCore.logger().with({ service: "runtime/gm_api" });
@ -79,7 +81,7 @@ export default class GMApi {
console.log("xml request", request, con); console.log("xml request", request, con);
// 先处理unsafe hearder // 先处理unsafe hearder
// 再发送到offscreen, 处理请求 // 再发送到offscreen, 处理请求
sendMessageToOffscreen("offscreen/gmApi/requestXhr", request.params); sendMessageToOffscreen(this.sender, "offscreen/gmApi/requestXhr", request.params);
} }
start() { start() {
@ -87,12 +89,11 @@ export default class GMApi {
} }
} }
export async function sendMessageToOffscreen(action: string, data?: any) { export async function sendMessageToOffscreen(sender: ServiceWorkerMessageSend, action: string, data?: any) {
// service_worker和offscreen同时监听消息,会导致消息被两边同时接收,但是返回结果时会产生问题,导致报错 // service_worker和offscreen同时监听消息,会导致消息被两边同时接收,但是返回结果时会产生问题,导致报错
// 不进行监听的话又无法从service_worker主动发送消息 // 不进行监听的话又无法从service_worker主动发送消息
// 所以这里通过clients.matchAll()获取到所有的client,然后通过postMessage发送消息 // 所以这里通过clients.matchAll()获取到所有的client,然后通过postMessage发送消息
const list = await clients.matchAll({ includeUncontrolled: true, type: "window" }); sender.sendMessage({
list[0].postMessage({
type: "sendMessage", type: "sendMessage",
data: { action, data }, data: { action, data },
}); });

View File

@ -6,7 +6,6 @@ import { ResourceService } from "./resource";
import { ValueService } from "./value"; import { ValueService } from "./value";
import { RuntimeService } from "./runtime"; import { RuntimeService } from "./runtime";
import { ServiceWorkerMessageSend } from "@Packages/message/window_message"; import { ServiceWorkerMessageSend } from "@Packages/message/window_message";
import { sendMessageToOffscreen } from "./gm_api";
export type InstallSource = "user" | "system" | "sync" | "subscribe" | "vscode"; export type InstallSource = "user" | "system" | "sync" | "subscribe" | "vscode";
@ -22,10 +21,8 @@ export default class ServiceWorkerManager {
const group = this.api.group("serviceWorker"); const group = this.api.group("serviceWorker");
group.on("preparationOffscreen", async () => { group.on("preparationOffscreen", async () => {
// 准备好环境 // 准备好环境
sendMessageToOffscreen("aa", "aa");
await this.sender.init(); await this.sender.init();
this.mq.emit("preparationOffscreen", {}); this.mq.emit("preparationOffscreen", {});
this.sender.sendMessage("test");
}); });
const resource = new ResourceService(group.group("resource"), this.mq); const resource = new ResourceService(group.group("resource"), this.mq);
@ -34,7 +31,7 @@ export default class ServiceWorkerManager {
value.init(); value.init();
const script = new ScriptService(group.group("script"), this.mq, value, resource); const script = new ScriptService(group.group("script"), this.mq, value, resource);
script.init(); script.init();
const runtime = new RuntimeService(group.group("runtime"), this.mq, value); const runtime = new RuntimeService(group.group("runtime"), this.sender, this.mq, value);
runtime.init(); runtime.init();
// 测试xhr // 测试xhr

View File

@ -4,12 +4,14 @@ import { Group } from "@Packages/message/server";
import { Script, SCRIPT_STATUS_ENABLE, SCRIPT_TYPE_NORMAL, ScriptAndCode, ScriptDAO } from "@App/app/repo/scripts"; import { Script, SCRIPT_STATUS_ENABLE, SCRIPT_TYPE_NORMAL, ScriptAndCode, ScriptDAO } from "@App/app/repo/scripts";
import { ValueService } from "./value"; import { ValueService } from "./value";
import GMApi from "./gm_api"; import GMApi from "./gm_api";
import { ServiceWorkerMessageSend } from "@Packages/message/window_message";
export class RuntimeService { export class RuntimeService {
scriptDAO: ScriptDAO = new ScriptDAO(); scriptDAO: ScriptDAO = new ScriptDAO();
constructor( constructor(
private group: Group, private group: Group,
private sender: ServiceWorkerMessageSend,
private mq: MessageQueue, private mq: MessageQueue,
private value: ValueService private value: ValueService
) {} ) {}
@ -53,7 +55,7 @@ export class RuntimeService {
}); });
// 启动gm api // 启动gm api
const gmApi = new GMApi(this.group, this.value); const gmApi = new GMApi(this.group, this.sender, this.value);
gmApi.start(); gmApi.start();
} }