From 647e3dd308907114e098de5e21447507d8d78359 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 27 Jun 2026 11:03:39 +0000 Subject: [PATCH] =?UTF-8?q?fix(StorageCleaner):=20=E5=90=8C=E4=B8=80?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E9=A1=B5=20URL=20=E5=8F=98=E6=9B=B4=E6=97=B6?= =?UTF-8?q?=E9=98=BB=E6=AD=A2=E8=AF=AF=E6=B8=85=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit handleClean 原先仅校验 tab id,未校验 url。用户在页面内导航后、 存储信息刷新完成前确认清理,会按旧页面展示的数据清理新页面存储。 --- .../StorageCleaner/__tests__/index.test.tsx | 29 ++++++++++++++++++- src/pages/StorageCleaner/useStorageCleaner.ts | 4 +-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/pages/StorageCleaner/__tests__/index.test.tsx b/src/pages/StorageCleaner/__tests__/index.test.tsx index bd348fc..2a19137 100644 --- a/src/pages/StorageCleaner/__tests__/index.test.tsx +++ b/src/pages/StorageCleaner/__tests__/index.test.tsx @@ -126,7 +126,34 @@ describe('StorageCleaner 页面', () => { await waitFor(() => { expect(clearStorage).not.toHaveBeenCalled(); - expect(toast.warning).toHaveBeenCalledWith('当前标签页已切换,请等待数据刷新后再清理'); + expect(toast.warning).toHaveBeenCalledWith('当前页面已变更,请等待数据刷新后再清理'); + }); + }); + + it('同一标签页 URL 变更后、数据刷新完成前不应执行清理', async () => { + let currentUrl = 'https://a.example.com'; + vi.mocked(getCurrentTab).mockImplementation( + async () => + ({ + id: 1, + url: currentUrl, + }) as any, + ); + + render(); + + await waitFor(() => { + expect(screen.getByRole('button', { name: /立即清理/ })).not.toBeDisabled(); + }); + + currentUrl = 'https://b.example.com'; + + fireEvent.click(screen.getByRole('button', { name: /立即清理/ })); + fireEvent.click(screen.getByRole('button', { name: /确认清理/ })); + + await waitFor(() => { + expect(clearStorage).not.toHaveBeenCalled(); + expect(toast.warning).toHaveBeenCalledWith('当前页面已变更,请等待数据刷新后再清理'); }); }); }); diff --git a/src/pages/StorageCleaner/useStorageCleaner.ts b/src/pages/StorageCleaner/useStorageCleaner.ts index 5dbe66e..3bed552 100644 --- a/src/pages/StorageCleaner/useStorageCleaner.ts +++ b/src/pages/StorageCleaner/useStorageCleaner.ts @@ -258,8 +258,8 @@ export function useStorageCleaner(): UseStorageCleanerReturn { } const boundTab = boundTabRef.current; - if (!boundTab || boundTab.id !== tab.id) { - toast.warning('当前标签页已切换,请等待数据刷新后再清理'); + if (!boundTab || boundTab.id !== tab.id || boundTab.url !== tab.url) { + toast.warning('当前页面已变更,请等待数据刷新后再清理'); setShowConfirm(false); return; }