From 57d3137640422d2cf3941abe1581ddf7a9ae83d7 Mon Sep 17 00:00:00 2001 From: zhangshun <453905631@qq.com> Date: Mon, 1 Jun 2026 10:40:04 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A8=A1=E5=9E=8B=E5=BA=93?= =?UTF-8?q?=E8=B7=A8=E7=AB=AF=E5=8F=A3=E6=B6=88=E6=81=AF=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/pages/app/modules/models.ts | 19 +++++++++++++++++-- web/src/pages/app/modules/preview.ts | 7 ++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/web/src/pages/app/modules/models.ts b/web/src/pages/app/modules/models.ts index 932ddd5..335fe20 100644 --- a/web/src/pages/app/modules/models.ts +++ b/web/src/pages/app/modules/models.ts @@ -320,7 +320,7 @@ function requestSceneModelImport() { window.parent.postMessage({ type: requestSceneModelMessageType, requestId - }, resolveParentOrigin()); + }, resolveParentPostMessageOrigin()); notify("已请求主程序导出当前选中模型"); } @@ -360,7 +360,12 @@ function createSceneModelRequestId() { function isAllowedParentOrigin(origin: string) { const expectedOrigin = resolveParentOrigin(); - return expectedOrigin === "*" || origin === expectedOrigin; + return expectedOrigin === "*" || origin === expectedOrigin || isLocalDmtParentOrigin(origin); +} + +function resolveParentPostMessageOrigin() { + const origin = resolveParentOrigin(); + return origin === window.location.origin ? "*" : origin; } function resolveParentOrigin() { @@ -375,6 +380,16 @@ function resolveParentOrigin() { return "*"; } +function isLocalDmtParentOrigin(origin: string) { + try { + const url = new URL(origin); + const isLocalHost = url.hostname === "localhost" || url.hostname === "127.0.0.1"; + return isLocalHost && url.port === "3000"; + } catch { + return false; + } +} + function ensureGlbFileName(fileName: string) { return fileName.toLowerCase().endsWith(".glb") ? fileName : `${fileName}.glb`; } diff --git a/web/src/pages/app/modules/preview.ts b/web/src/pages/app/modules/preview.ts index d20ac7a..3ce20f5 100644 --- a/web/src/pages/app/modules/preview.ts +++ b/web/src/pages/app/modules/preview.ts @@ -258,7 +258,7 @@ export function emitImportScenePayload(payload: PreviewImportScenePayload) { window.parent.postMessage({ type: "DMT_MODEL_LIBRARY_IMPORT_SCENE", payload: buildParentImportScenePayload(payload) - }, resolveParentOrigin()); + }, resolveParentPostMessageOrigin()); } catch (error) { notifyError(error); } @@ -280,6 +280,11 @@ function buildParentImportScenePayload(payload: PreviewImportScenePayload): Pare }; } +function resolveParentPostMessageOrigin() { + const origin = resolveParentOrigin(); + return origin === window.location.origin ? "*" : origin; +} + function resolveParentOrigin() { try { const meta = import.meta as ImportMeta & { env?: Record };