真实 Monaco / 自研浏览器兼容探针
这是隔离的宿主Jint/AngleSharp探针,不使用宿主浏览器,不嵌入Chromium,不伪造Monaco。生产探针直接引用Browser项目,结果保存Browser源码哈希和运行期间是否变化;独立DOM诊断则捕获源码副本。两者运行未修改的官方Monaco0.52.2加载器和AMD入口,按真实资源插入顺序处理script/link及load/error事件。源文件、资源与错误记录保存到 build/BrowserProbe/;不修改共享Browser源码、用户虚拟机或旧发行包。
当前生产集成入口为 ProductionProbe/ProductionProbe.csproj,直接引用生产BrowserService,先设置真实Windows私有TTF字体画布与800×600视口,再 Navigate("about:Monaco")。它不添加window API模拟层,验证官方资源加载、真实editor.create、getValue/setValue、实际type action、真实键盘/beforeinput/input导致的精确文本变化,以及JavaScript语法标记。字形来自仓库固定CascadiaMono TTF的GDI+测量和alpha栅格,输出为离屏PNG;宿主GDI+与内核自己的TTF渲染器分别标注,不能把此PNG当作裸机呈现。
dotnet run --project Tools/BrowserCompatibility/ProductionProbe/ProductionProbe.csproj --artifacts-path "C:\Users\XFEstudio\Desktop\work\CSharp\GitHub\XFEstudio\XFESystem\build\BrowserProbe\ProductionArtifacts" -c Release -- "C:\Users\XFEstudio\Desktop\work\CSharp\GitHub\XFEstudio\XFESystem"
阶段诊断的退出码0表示探针执行并写出记录,不能据此认定编辑器通过;应读取Result中的Created和每项Passed。所有NativeGuestTested目前为false,只有后续实际内核测试才能改变裸机结论。
最终宿主生产记录为 build/BrowserProbe/Production-1791952177610/Result.json:11项全部通过,SourceUnchangedDuringRun=true、ManualCreateDiagnosticUsed=false。真实初始view-lines、模型读写、type action、textarea焦点、一次keydown/beforeinput/input引起的精确模型变化、JavaScript语法标记和鼠标换位均通过;MonacoInitial.png 与 ProductionCanvas.png 已目视确认代码颜色、行号和光标。全探针耗时4.509秒,托管堆233,585,992字节,进程working set351,105,024字节;这是Windows宿主测量,不是裸机性能。
此配置明确关闭worker驱动的TypeScript语言服务及部分辅助功能,保留真实Monarch着色与编辑器核心;资源记录未加载tsWorker。页面仍保留尝试其他Worker辅助服务的警告及失败诊断,不宣称Worker、完整语言服务或完整浏览器兼容。初始失败记录和空白画布证据继续保留,不能用最终模型API成功覆盖历史失败。
python Tools/BrowserCompatibility/FetchMonaco.py
powershell -NoProfile -ExecutionPolicy Bypass -File Tools/BrowserCompatibility/RunCurrentDomProbe.ps1
dotnet的artifacts目录始终为绝对路径,项目不引用仍在整合的BrowserService。当前探针扩大预算用于真实大脚本,CSS插件保持启用,并读取真实CSS资源;尚未接上生产布局/原生绘制器时,结果明确为 NativeCssLayoutConnected=false,不把读取CSS冒充样式布局完成。NativeGuestTested=false 和 HostBrowserUsed=false 分别保留宿主解释器实验的边界。
MonacoProbe.csproj 是初始桥快照的分阶段历史诊断,依赖当时捕获的 build/BrowserProbe/InitialBaseline 六个源码文件。它先记录原生产预算拒绝3.77MiB主体,再在隔离环境逐个添加API;其中NoCss/Task/WindowEvent/DomToken阶段使用官方CSS插件的disabled选项,仅用于发现后续阻断,不能作为最终CSS/Monaco验收。诊断脚本不进入生产浏览器。
初始实测顺序:加载器成功;主体被脚本预算拒绝;隔离放宽后依次缺navigator、CSS插件所需getElementsByTagName/head/link事件、queueMicrotask、UIEvent、display-mode媒体查询、queryCommandSupported、classList.toggle、Node.append及style。补齐部分平台API后,真实主体与AMD入口在Jint成功;真实editor.create仍须继续验证。新桥又发现合法Jint BindFunction计时器被仅检查Function的代码误拒,已反馈生产桥维护者修正。所有阶段以Result.json实际记录为准,未通过的创建或交互不计入通过。