From 06a29f9b0fac16b877de4c402a899fbfa366de5d Mon Sep 17 00:00:00 2001 From: Pine Date: Fri, 4 Sep 2026 23:37:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E4=B8=AA=E4=BA=BA=E4=B8=BB=E9=A1=B5):=20?= =?UTF-8?q?=E5=9B=9E=E5=BD=92=E7=BA=AFsandbox=E9=9A=94=E7=A6=BB=EF=BC=8C?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=B3=A8=E5=85=A5=E8=84=9A=E6=9C=AC=E5=92=8C?= =?UTF-8?q?=E7=88=B6=E9=A1=B5=E9=9D=A2=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除沙箱拦截脚本注入、handleOpenUrl、opc:page:open-url postMessage - 仅靠浏览器sandbox强制隔离:无allow-popups/allow-top-navigation - 内部所有跳转仅限iframe内,window.open和target=_top被浏览器阻止 - 彻底消除父页面navigate导致的白屏 - srcDoc直接渲染用户HTML,不注入任何脚本 --- console/src/pages/portal/Opc/UserHomePage.tsx | 88 +++---------------- 1 file changed, 10 insertions(+), 78 deletions(-) diff --git a/console/src/pages/portal/Opc/UserHomePage.tsx b/console/src/pages/portal/Opc/UserHomePage.tsx index 345901a..ce7b209 100644 --- a/console/src/pages/portal/Opc/UserHomePage.tsx +++ b/console/src/pages/portal/Opc/UserHomePage.tsx @@ -3,7 +3,7 @@ // 内容区 iframe 渲染用户自写 HTML(沙箱)或嵌入第三方网页,右上角保留 // 「更多选项 + 返回」标准胶囊按钮,底部展示能力接入说明或数据核实提醒。 import { useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { useLocation, useNavigate } from "react-router-dom"; +import { useLocation } from "react-router-dom"; import { isOsPath } from "../../../utils/navigationMode"; import { Avatar, Button, Dropdown, Empty, Input, Modal, Segmented, Spin, Switch, Tag, message } from "antd"; import type { MenuProps } from "antd"; @@ -17,20 +17,6 @@ import styles from "./UserHome.module.less"; /** 本页窗口的固定 routeId(窗口 id 即 routeId,用于返回/退出时关闭)。 */ const HOME_ROUTE_ID = "core.user-home"; -/** - * 沙箱拦截脚本:注入到用户自写 HTML 顶部,捕获所有"试图跳出 iframe"的动作。 - * - window.open() → 不打开新标签,改为 postMessage 通知父页面 - * - → 阻止默认跳转,改为 postMessage - * - form target=_blank|_top|_parent → 阻止提交 - * 父页面收到 opc:page:open-url 后统一路由:内部用户主页开新 usershome,外部链接开系统浏览器。 - */ -const SANDBOX_INTERCEPT_SCRIPT = `