diff --git a/src/app/service/service_worker/client.ts b/src/app/service/service_worker/client.ts index 40c7aa83a..2329d5d3c 100644 --- a/src/app/service/service_worker/client.ts +++ b/src/app/service/service_worker/client.ts @@ -9,10 +9,9 @@ import type { ScriptMenuItem, SearchType, TBatchUpdateListAction, - TScriptMenuItemKey, } from "./types"; import { Client } from "@Packages/message/client"; -import type { ExtMessageSender, MessageSend } from "@Packages/message/types"; +import type { MessageSend } from "@Packages/message/types"; import type PermissionVerify from "./permission_verify"; import { type UserConfirm } from "./permission_verify"; import { type FileSystemType } from "@Packages/filesystem/factory"; @@ -280,8 +279,7 @@ export type GetPopupDataRes = { export type MenuClickParams = { uuid: string; - key: TScriptMenuItemKey; - sender: ExtMessageSender; + menus: ScriptMenuItem[]; inputValue?: any; }; @@ -294,16 +292,11 @@ export class PopupClient extends Client { return this.doThrow("getPopupData", data); } - menuClick(uuid: string, data: ScriptMenuItem, inputValue?: any) { + menuClick(uuid: string, menus: ScriptMenuItem[], inputValue?: any) { return this.do("menuClick", { uuid, - key: data.key, + menus, inputValue, - sender: { - tabId: data.tabId, - frameId: data.frameId, - documentId: data.documentId, - }, } as MenuClickParams); } } diff --git a/src/app/service/service_worker/popup.ts b/src/app/service/service_worker/popup.ts index 5dee3bb61..127b022a4 100644 --- a/src/app/service/service_worker/popup.ts +++ b/src/app/service/service_worker/popup.ts @@ -511,15 +511,24 @@ export class PopupService { } // 触发目标 tab/frame 的「menuClick」事件;key 为菜单唯一键以定位对应 listener。 - async menuClick({ uuid, key, sender, inputValue }: MenuClickParams) { - // 菜单点击事件 - await this.runtime.emitEventToTab(sender, { - uuid, - event: "menuClick", - eventId: `${key}`, - data: inputValue, - }); - return true; + async menuClick({ uuid, menus, inputValue }: MenuClickParams) { + await Promise.allSettled( + menus.map((menu) => + this.runtime.emitEventToTab( + { + tabId: menu.tabId, + frameId: menu.frameId || 0, + documentId: menu.documentId || "", + }, + { + uuid, + event: "menuClick", + eventId: `${menu.key}`, + data: inputValue, + } + ) + ) + ); } async updateBadgeIcon() { @@ -677,29 +686,18 @@ export class PopupService { // 寻找menu信息 const menu = await this.getScriptMenu(tab!.id!); let script = menu.find((item) => item.uuid === uuid); - let bgscript = false; if (!script) { // 从后台脚本中寻找 const backgroundMenu = await this.getScriptMenu(-1); script = backgroundMenu.find((item) => item.uuid === uuid); - bgscript = true; } if (script) { // 仅触发「非输入型」且 groupKey 相符的项目;同 groupKey 可能代表多个 frame 来源,一次性全部触发。 const menuItems = script.menus.filter((item) => item.groupKey === groupKey && !item.options?.inputType); - await Promise.allSettled( - menuItems.map((menuItem) => - this.menuClick({ - uuid: script.uuid, - key: menuItem.key, - sender: { - tabId: bgscript ? -1 : tab!.id!, - frameId: menuItem.frameId || 0, - documentId: menuItem.documentId || "", - }, - } as MenuClickParams) - ) - ); + await this.menuClick({ + uuid: script.uuid, + menus: menuItems, + } as MenuClickParams); return; } } diff --git a/src/pages/components/ScriptMenuList/index.tsx b/src/pages/components/ScriptMenuList/index.tsx index d6c1f2fe8..b40ed8708 100644 --- a/src/pages/components/ScriptMenuList/index.tsx +++ b/src/pages/components/ScriptMenuList/index.tsx @@ -38,12 +38,11 @@ const CollapseItem = Collapse.Item; const sendMenuAction = ( uuid: string, - name: string, options: ScriptMenuItemOption | undefined, menus: ScriptMenuItem[], inputValue?: any ) => { - Promise.allSettled(menus.map((menu) => popupClient.menuClick(uuid, menu, inputValue))).then(() => { + popupClient.menuClick(uuid, menus, inputValue).then(() => { options?.autoClose !== false && window.close(); }); }; @@ -86,7 +85,7 @@ const MenuItem = React.memo(({ menuItems, uuid }: MenuItemProps) => { autoComplete="off" onSubmit={(v) => { const inputValue = v.inputValue; - sendMenuAction(uuid, name, options, menuItems, inputValue); + sendMenuAction(uuid, options, menuItems, inputValue); }} >