# XFESystem C# 浏览器后端 此阶段提供真实 **Jint 4.11.0** JavaScript 解释器、**AngleSharp 1.7.1** HTML DOM,以及复用网站管线的 `XFESystem.Documents.MarkdownRenderer`。界面适配器实现 `IJavaScriptPreviewService`: ```csharp var browser = new BrowserService(); var page = browser.Navigate("about:Start"); // 真内联 JS 修改 DOM,文本包含 JavaScript ready: 12 var result = browser.PreviewJavaScript("console.log('Answer', 6 * 7)"); var markdown = browser.PreviewMarkdown("# XFESystem\n\n**Hello**"); ``` `ExecuteJavaScript` 操作当前网页的解释器和有限 DOM;本地文件预览使用 `PreviewJavaScript`,每次建立新的无 DOM 解释器,不能读取或修改此前网页。每次导航也建立新的解释器。 显式 DOM 包含 `document.getElementById/querySelector/createElement`、`document.title/body/documentElement`,元素的 `textContent/innerHTML/id/className/value/tagName/parentElement`、`getAttribute/setAttribute/querySelector/appendChild/remove`。投影使用 `ObjectInstance`、`ClrFunction` 和属性描述符,不把 CLR 实例反射给网页。 浏览器将 HTML 转为文本及编号链接。**完整 CSS 排版、外部脚本、模块、浏览器事件、JavaScript fetch、WebAssembly 尚未实现。** 声明 HTTP header 或 meta CSP 的页面会保守禁止全部自动脚本,并显示原因;目前不实现完整 CSP 指令匹配。Markdown 的网页脚本增强功能(KaTeX/Mermaid 等)由 Documents 的完整 HTML 预览在宿主浏览器中单独验收,当前文本后端不会执行这些外部渲染资源。 `IWebTransport` 是显式网络边界,默认 `UnavailableWebTransport` 不访问网络/宿主磁盘。`HttpWebTransport` 仅供已经具备 HttpClient 所需 socket/TLS/时钟/信任根的运行时显式注入;Windows 宿主的网络测试不证明裸机已联网。HTTPS 要求 transport 确认验证证书,不允许降级到 HTTP;适配器使用默认严格证书验证、有限重定向、整次超时及正文大小上限。 可选的 `IWebTransportCapabilities` 声明已接入后端及其 HTTP/HTTPS 实现,`BrowserService` 在构造时保存快照。`NativeNetworkTransport` 表示显式接入裸机适配器,不表示网卡、链路、DHCP、DNS 或远端服务当前可用;每次请求仍须检查运行前提。未声明能力的旧适配器可以继续工作,但不推断其能力。当前 C# 裸机 `NativeWebTransport` 声明 HTTP 支持、HTTPS 不可用,并在实际 HTTPS 导航时明确拒绝;声明能力不能绕过证书验证。 解释器关闭 CLR、反射、动态字符串编译、模块加载和阻塞式 `Atomics.wait`,并限制脚本长度、语句数、单次分配、时间、递归、数组、控制台与返回值。DOM 节点/深度/合计文字与属性(含投影的 detached 节点)受限,失败修改回滚。这些是协作式约束,不构成进程安全隔离;Jint 单次分配限额也不是整个进程常驻内存上限。 ```powershell dotnet test Tests/XFESystem.Browser.Tests/XFESystem.Browser.Tests.csproj dotnet run --project Samples/XFESystem.BrowserDemo -- --Verify build/CSharp/BrowserDemo/HostVerification.json ``` 测试包括真实 loopback HTTP→重定向→HTML/JS/DOM、真实 TLS 连接拒绝自签证书,以及语句/内存/输出/DOM限额、CSP、预览上下文隔离。报告明确宿主与 guest 验证范围。 NativeAOT 宿主烟测实际通过,但 Jint 4.11.0 保留禁用的动态 CLR 分支,静态分析产生 IL2026/IL2104/IL3053 告警。验证命令只将这些分析告警设为非致命并保留完整日志,未在系统项目禁用分析。发布程序实际运行验证了解释器、DOM、Markdown 与约束;裸机导入仍须由 QEMU 验收。 ```powershell $Artifacts = Join-Path (Get-Location) 'build/CSharp/BrowserHostArtifacts' dotnet publish Samples/XFESystem.BrowserDemo -c Release -r win-x64 -p:PublishAot=true "-p:ArtifactsPath=$Artifacts" -p:ILLinkTreatWarningsAsErrors=false -p:IlcTreatWarningsAsErrors=false -o build/CSharp/BrowserDemo/WindowsNativeAot ``` `ArtifactsPath` 使用绝对路径,避免多项目同时编译共享默认 `obj`。 实现依据:[Jint 4.11 约束与 API](https://github.com/sebastienros/jint/blob/v4.11.0/README.md)、[该版本官方 NativeAOT 示例](https://github.com/sebastienros/jint/tree/v4.11.0/Jint.AotExample)、[AngleSharp 官方项目](https://github.com/AngleSharp/AngleSharp)。