From 52288582ceda80c3d1b4b471385073532c735054 Mon Sep 17 00:00:00 2001 From: yu859 <15715093608@163.com> Date: Mon, 13 Jul 2026 21:37:51 +0800 Subject: [PATCH] fix(core): propagate connection meta and owner document to popup --- .../src/client/webcomponents/state/__tests__/popup.test.ts | 5 +++++ packages/core/src/client/webcomponents/state/popup.ts | 3 +++ .../core/src/client/webcomponents/utils/useIframePanes.ts | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/core/src/client/webcomponents/state/__tests__/popup.test.ts b/packages/core/src/client/webcomponents/state/__tests__/popup.test.ts index 93983e31..6fba0d53 100644 --- a/packages/core/src/client/webcomponents/state/__tests__/popup.test.ts +++ b/packages/core/src/client/webcomponents/state/__tests__/popup.test.ts @@ -52,6 +52,9 @@ function createMockContext( docks: { switchEntry: vi.fn(), }, + rpc: { + connectionMeta: { backend: 'ws' }, + }, } as unknown as DocksContext } @@ -175,6 +178,8 @@ describe('dock popup state', () => { expect(appRoot).toBeTruthy() expect(appRoot.id).toBe('vite-devtools-popup-root') expect(appRoot.appended).toHaveLength(1) + expect((popup as unknown as { __DEVFRAME_CONNECTION_META__?: unknown }).__DEVFRAME_CONNECTION_META__) + .toBe(context.rpc.connectionMeta) }) it('hides dock overflow panel when opening popup', async () => { diff --git a/packages/core/src/client/webcomponents/state/popup.ts b/packages/core/src/client/webcomponents/state/popup.ts index b459ef86..dc7846b6 100644 --- a/packages/core/src/client/webcomponents/state/popup.ts +++ b/packages/core/src/client/webcomponents/state/popup.ts @@ -18,6 +18,7 @@ const PANEL_MAX_SIZE = 100 const POPUP_MIN_WIDTH = 320 const POPUP_MIN_HEIGHT = 240 const MAIN_FRAME_ACTION_HANDLER_KEY = '__VITE_DEVTOOLS_TRIGGER_DOCK_ACTION__' +const DEVFRAME_CONNECTION_META_KEY = '__DEVFRAME_CONNECTION_META__' const popupWindow = shallowRef(null) const isPopupOpen = shallowRef(false) @@ -179,6 +180,8 @@ async function mountStandaloneApp(context: DocksContext, popup: Window) { popup.document.head?.appendChild(baseStyle) popup.document.body.textContent = '' + ;(popup as Window & { [DEVFRAME_CONNECTION_META_KEY]?: unknown })[DEVFRAME_CONNECTION_META_KEY] = context.rpc.connectionMeta + const appRoot = popup.document.createElement('div') appRoot.id = 'vite-devtools-popup-root' popup.document.body.appendChild(appRoot) diff --git a/packages/core/src/client/webcomponents/utils/useIframePanes.ts b/packages/core/src/client/webcomponents/utils/useIframePanes.ts index 5e861cce..8895f9fa 100644 --- a/packages/core/src/client/webcomponents/utils/useIframePanes.ts +++ b/packages/core/src/client/webcomponents/utils/useIframePanes.ts @@ -25,7 +25,7 @@ export function useIframePanes( container, (el) => { if (el && !panes.value) { - panes.value = markRaw(createIframePanes({ container: el })) + panes.value = markRaw(createIframePanes({ container: el, document: el.ownerDocument })) stop() } },