From 8e56ebff6ec9d1343f8e75b3f21ab6960cf89f71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E9=9C=96=E9=93=83?= Date: Wed, 20 May 2026 21:07:06 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BD=BF=E7=94=A8=20openPopup()=20?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3=20tabs.create()=20=E6=89=93=E5=BC=80?= =?UTF-8?q?=E5=BC=B9=E7=AA=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - background.ts: 使用 browser.action.openPopup() 打开 popup 弹窗 - 先保存数据到 storage,然后打开 popup - RouterProvider.tsx: 初始化时检查 storage 中的 pendingData 并跳转到对应页面 - 移除之前错误的 tabs.create() 方式 --- entrypoints/background.ts | 13 ++++++++++--- providers/RouterProvider.tsx | 18 +++++++++++++++++- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/entrypoints/background.ts b/entrypoints/background.ts index 48238e4..407cb90 100644 --- a/entrypoints/background.ts +++ b/entrypoints/background.ts @@ -2,6 +2,7 @@ import '../.wxt/types/imports.d.ts'; import { browser } from 'wxt/browser'; import { MessageAction, onMessage, sendMessage } from '@/utils/messages'; import { createAllContextMenus, parseContextMenuClick } from '@/utils/contextMenu'; +import { saveContextMenuData } from '@/utils/useContextMenuData'; export default defineBackground(() => { browser.runtime.onInstalled.addListener(() => { @@ -32,9 +33,15 @@ export default defineBackground(() => { // sidepanel 未打开或无法通信,继续执行其他方案 } - const popupUrl = chrome.runtime.getURL('/popup.html'); - const params = new URLSearchParams({ feature: featureKey, payload }); - await browser.tabs.create({ url: `${popupUrl}?${params.toString()}` }); + // 保存数据到 storage,popup 打开后会读取 + await saveContextMenuData({ featureKey, payload }); + + // 打开 popup 弹窗 + try { + await browser.action.openPopup(); + } catch (err) { + console.error('[Context Menu] 打开 popup 失败:', err); + } }); // 监听扩展图标点击事件,打开侧边栏 diff --git a/providers/RouterProvider.tsx b/providers/RouterProvider.tsx index 1f72adf..a3741a2 100644 --- a/providers/RouterProvider.tsx +++ b/providers/RouterProvider.tsx @@ -14,7 +14,7 @@ import { getDefaultPageOrder, getDefaultVisibleFeatureKeys, } from '@/config/features'; -import { saveContextMenuData } from '@/utils/useContextMenuData'; +import { saveContextMenuData, clearContextMenuData } from '@/utils/useContextMenuData'; /** * 校验是否为合法的页面类型 @@ -204,8 +204,24 @@ export function RouterProvider({ url.searchParams.delete('feature'); url.searchParams.delete('payload'); window.history.replaceState({}, '', url.toString()); + return; } } + + // 检查 storage 中的右键菜单待处理数据(用于 openPopup 场景) + storageUtil + .get('contextMenu/pendingData', undefined) + .then((pendingData) => { + if ( + pendingData && + isValidPage(pendingData.featureKey) && + Date.now() - pendingData.timestamp < 5000 + ) { + navigateTo(pendingData.featureKey as PageType); + clearContextMenuData().catch(console.error); + } + }) + .catch(console.error); } }) .catch(console.error);