From ffabe268b1f9baea2725b5fa46ba493b2e008797 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Tue, 29 Apr 2025 11:53:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8C=B9=E9=85=8D=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E4=B8=8E=E4=BC=98=E5=8C=96=E6=89=B9=E9=87=8F=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/service/service_worker/runtime.ts | 6 ++++-- src/locales/zh-CN/translation.json | 4 +++- src/pages/options/routes/ScriptList.tsx | 20 +++++++++++++------- src/pages/store/features/script.ts | 18 +++++++++++++++++- src/pkg/utils/match.test.ts | 6 ++++++ 5 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/app/service/service_worker/runtime.ts b/src/app/service/service_worker/runtime.ts index 7c648b7..3cb82d4 100644 --- a/src/app/service/service_worker/runtime.ts +++ b/src/app/service/service_worker/runtime.ts @@ -238,7 +238,7 @@ export class RuntimeService { return undefined; } // 如果是iframe,判断是否允许在iframe里运行 - if (chromeSender.frameId !== undefined) { + if (chromeSender.frameId) { if (scriptRes.metadata.noframes) { return undefined; } @@ -485,7 +485,9 @@ export class RuntimeService { // 如果脚本开启, 则注册脚本 if (this.isEnableDeveloperMode && script.status === SCRIPT_STATUS_ENABLE) { - if (!scriptRes.metadata["noframes"]) { + if (scriptRes.metadata["noframes"]) { + registerScript.allFrames = false; + } else { registerScript.allFrames = true; } if (scriptRes.metadata["run-at"]) { diff --git a/src/locales/zh-CN/translation.json b/src/locales/zh-CN/translation.json index cdf42f5..661ce64 100644 --- a/src/locales/zh-CN/translation.json +++ b/src/locales/zh-CN/translation.json @@ -369,5 +369,7 @@ "export_success": "导出成功", "get_backup_dir_url_failed": "获取备份目录地址失败", "get_backup_files_failed": "获取备份文件失败", - "develop_mode_guide": "检测到当前未开启开发者模式,您的脚本无法正常使用,👉点我了解如何开启" + "develop_mode_guide": "检测到当前未开启开发者模式,您的脚本无法正常使用,👉点我了解如何开启", + "enable_script_failed": "脚本开启失败", + "disable_script_failed": "脚本关闭失败" } \ No newline at end of file diff --git a/src/pages/options/routes/ScriptList.tsx b/src/pages/options/routes/ScriptList.tsx index 53986e9..0fb64cc 100644 --- a/src/pages/options/routes/ScriptList.tsx +++ b/src/pages/options/routes/ScriptList.tsx @@ -81,6 +81,8 @@ import { requestStopScript, requestRunScript, scriptClient, + enableLoading, + updateEnableStatus, } from "@App/pages/store/features/script"; import { message, systemConfig } from "@App/pages/store/global"; import { SynchronizeClient, ValueClient } from "@App/app/service/service_worker/client"; @@ -706,19 +708,23 @@ function ScriptList() { type="primary" size="mini" onClick={() => { - const uuids: string[] = []; + const enableAction = (enable: boolean) => { + const uuids = select.map((item) => item.uuid); + dispatch(enableLoading({ uuids: uuids, loading: true })); + Promise.allSettled(uuids.map((uuid) => scriptClient.enable(uuid, enable))).finally(() => { + dispatch(updateEnableStatus({ uuids: uuids, enable: enable })); + dispatch(enableLoading({ uuids: uuids, loading: false })); + }); + }; switch (action) { case "enable": - select.forEach((item) => { - dispatch(requestEnableScript({ uuid: item.uuid, enable: true })); - }); + enableAction(true); break; case "disable": - select.forEach((item) => { - dispatch(requestEnableScript({ uuid: item.uuid, enable: false })); - }); + enableAction(false); break; case "export": + const uuids: string[] = []; select.forEach((item) => { uuids.push(item.uuid); }); diff --git a/src/pages/store/features/script.ts b/src/pages/store/features/script.ts index b6fd143..fb9346d 100644 --- a/src/pages/store/features/script.ts +++ b/src/pages/store/features/script.ts @@ -102,6 +102,22 @@ export const scriptSlice = createAppSlice({ script.runStatus = action.payload.runStatus; } }, + updateEnableStatus: (state, action: PayloadAction<{ uuids: string[]; enable: boolean }>) => { + state.scripts = state.scripts.map((s) => { + if (action.payload.uuids.includes(s.uuid)) { + s.status = action.payload.enable ? SCRIPT_STATUS_ENABLE : SCRIPT_STATUS_DISABLE; + } + return s; + }); + }, + enableLoading(state, action: PayloadAction<{ uuids: string[]; loading: boolean }>) { + state.scripts = state.scripts.map((s) => { + if (action.payload.uuids.includes(s.uuid)) { + s.enableLoading = action.payload.loading; + } + return s; + }); + }, }, extraReducers: (builder) => { builder @@ -144,6 +160,6 @@ export const scriptSlice = createAppSlice({ }, }); -export const { sortScript, upsertScript, deleteScript } = scriptSlice.actions; +export const { sortScript, upsertScript, deleteScript, enableLoading, updateEnableStatus } = scriptSlice.actions; export const { selectScripts } = scriptSlice.selectors; diff --git a/src/pkg/utils/match.test.ts b/src/pkg/utils/match.test.ts index 7bcad1e..43dced8 100644 --- a/src/pkg/utils/match.test.ts +++ b/src/pkg/utils/match.test.ts @@ -179,6 +179,12 @@ describe("parsePatternMatchesURL", () => { host: "127.0.0.1", path: "", }); + const matches4 = parsePatternMatchesURL("*://*/*"); + expect(matches4).toEqual({ + scheme: "*", + host: "*", + path: "*", + }); }); it("search", () => { // 会忽略掉search部分