/** * L2 沙箱视图 —— 活动包里名为 `activity-ledger` 的视图模版(关键台账数据看板:最近一次已放行实例的落账快照, * 行由基座按清单 `viewTemplates[].data` 的声明从正式表圈出,见 `view-scope.ts`)。 * * 模版本身**无脚本**(安装静态审 `templateIsSafe` 拦着);而 iframe 是 `sandbox="allow-scripts"` * 无同源,父页量不到它的高 —— 报高的脚本由服务端在**出口那一刻**注入,协议只有一条消息: * `postMessage({ type: 'jcai:view-height', height }, '*')`(load + ResizeObserver + 1s 兜底)。 */ import { ACTIVITY_VIEW_HEIGHT_MESSAGE } from '@contracts'; export const LEDGER_TEMPLATE = 'activity-ledger'; export function heightScript(): string { return ( `' ); } /** 插在 `` 之前(没有就追加在末尾);模版原文一个字不改 */ export function injectHeightScript(html: string): string { const script = heightScript(); const at = html.toLowerCase().lastIndexOf(''); return at < 0 ? `${html}\n${script}` : `${html.slice(0, at)}${script}${html.slice(at)}`; }