[{"data":1,"prerenderedAt":411},["ShallowReactive",2],{"msfe-doc:\u002Fguide\u002Fdebugging":3},{"id":4,"title":5,"body":6,"description":396,"extension":397,"keywords":398,"locale":402,"meta":403,"navigation":404,"order":405,"path":406,"section":407,"seo":408,"stem":409,"__hash__":410},"docs\u002Fguide\u002Fdebugging.zh-CN.md","诊断与验证",{"type":7,"value":8,"toc":389},"minimark",[9,13,17,20,23,123,126,246,253,262,265,370,373,376,385],[10,11,12],"h2",{"id":12},"保留一个可复现的最小文件",[14,15,16],"p",{},"问题报告应包含原始 Markdown、安装扩展及配置、模式\u002F只读状态、复现步骤和版本。不要只截取渲染后的 HTML：源码拼写、围栏是否闭合以及选区位置都可能决定行为。",[14,18,19],{},"先保留未保存源码，再缩减扩展组合；同一 UI 问题可以暂时切换 source 模式判断文本是否仍正确。不要通过重新创建实例“修复”问题并丢掉撤销历史。",[10,21,22],{"id":22},"常见问题定位",[24,25,26,39],"table",{},[27,28,29],"thead",{},[30,31,32,36],"tr",{},[33,34,35],"th",{},"现象",[33,37,38],{},"先检查",[40,41,42,51,59,67,75,83,91,99,107,115],"tbody",{},[30,43,44,48],{},[45,46,47],"td",{},"插件语法原样显示",[45,49,50],{},"是否安装、是否闭合、类型名是否注册、解析是否 pending",[30,52,53,56],{},[45,54,55],{},"自定义节点显示但不能改",[45,57,58],{},"字段验证、patch 是否实现、只读、原范围是否过期",[30,60,61,64],{},[45,62,63],{},"组件不出现",[45,65,66],{},"是否使用对应 renderer，Host 是否仍在 Provider 树里",[30,68,69,72],{},[45,70,71],{},"自定义代码块只有工具栏",[45,73,74],{},"CodeBlock NodeView 本来只控制 header；整块预览需要 block 层",[30,76,77,80],{},[45,78,79],{},"双份组件或重复安装错误",[45,81,82],{},"是否同时安装 StarterKit 的原功能和同名派生功能",[30,84,85,88],{},[45,86,87],{},"切换语言后仍不高亮",[45,89,90],{},"codeLanguages 是否包含精确名称\u002F别名，加载是否失败",[30,92,93,96],{},[45,94,95],{},"图表空白",[45,97,98],{},"容器尺寸、数据校验、引擎错误及加载状态",[30,100,101,104],{},[45,102,103],{},"中文输入中光标跳动",[45,105,106],{},"是否在 composition 中改 DOM、抢焦点或重建 editor",[30,108,109,112],{},[45,110,111],{},"弹窗确认改错位置",[45,113,114],{},"是否丢失 target，或使用了旧数值偏移",[30,116,117,120],{},[45,118,119],{},"只读仍有替换入口",[45,121,122],{},"控件是否读取实际 readOnly，最终是否检查命令结果",[10,124,125],{"id":125},"观察错误与语义",[127,128,133],"pre",{"className":129,"code":130,"language":131,"meta":132,"style":132},"language-ts shiki shiki-themes github-light github-light github-dark","const options = {\n  onError(error: unknown) { console.error('MSFE integration error', error) },\n}\nconst query = editor.querySource('customContainer')\nconst outcome = editor.lastCommandResult\nconst work = editor.work\n","ts","",[134,135,136,156,190,196,220,233],"code",{"__ignoreMap":132},[137,138,141,145,149,152],"span",{"class":139,"line":140},"line",1,[137,142,144],{"class":143},"sDD9d","const",[137,146,148],{"class":147},"sUNQB"," options",[137,150,151],{"class":143}," =",[137,153,155],{"class":154},"sVPnS"," {\n",[137,157,159,163,166,170,173,176,179,181,183,187],{"class":139,"line":158},2,[137,160,162],{"class":161},"sgQzM","  onError",[137,164,165],{"class":154},"(",[137,167,169],{"class":168},"sde8i","error",[137,171,172],{"class":143},":",[137,174,175],{"class":147}," unknown",[137,177,178],{"class":154},") { console.",[137,180,169],{"class":161},[137,182,165],{"class":154},[137,184,186],{"class":185},"s-HEn","'MSFE integration error'",[137,188,189],{"class":154},", error) },\n",[137,191,193],{"class":139,"line":192},3,[137,194,195],{"class":154},"}\n",[137,197,199,201,204,206,209,212,214,217],{"class":139,"line":198},4,[137,200,144],{"class":143},[137,202,203],{"class":147}," query",[137,205,151],{"class":143},[137,207,208],{"class":154}," editor.",[137,210,211],{"class":161},"querySource",[137,213,165],{"class":154},[137,215,216],{"class":185},"'customContainer'",[137,218,219],{"class":154},")\n",[137,221,223,225,228,230],{"class":139,"line":222},5,[137,224,144],{"class":143},[137,226,227],{"class":147}," outcome",[137,229,151],{"class":143},[137,231,232],{"class":154}," editor.lastCommandResult\n",[137,234,236,238,241,243],{"class":139,"line":235},6,[137,237,144],{"class":143},[137,239,240],{"class":147}," work",[137,242,151],{"class":143},[137,244,245],{"class":154}," editor.work\n",[14,247,248,249,252],{},"由宿主把 ",[134,250,251],{},"onError"," 接到开发诊断和产品错误边界。不要把文档正文、凭证或整个 editor 对象直接发送到外部日志服务。命令拒绝通常是可处理结果，并不都会作为异常抛出。",[14,254,255,257,258,261],{},[134,256,211],{}," 的 pending 和 unsupported 需要分别处理。工作计数适合比较同一动作前后的差值，不能把累计值当作渲染耗时；替换冲突检查 ",[134,259,260],{},"projectionConflicts","。",[10,263,264],{"id":264},"自定义功能最低验证矩阵",[24,266,267,280],{},[27,268,269],{},[30,270,271,274,277],{},[33,272,273],{},"方面",[33,275,276],{},"验证动作",[33,278,279],{},"必须成立",[40,281,282,293,304,315,326,337,348,359],{},[30,283,284,287,290],{},[45,285,286],{},"源码",[45,288,289],{},"原样加载、模式切换、显示预览",[45,291,292],{},"未发写命令时逐字不变",[30,294,295,298,301],{},[45,296,297],{},"写回",[45,299,300],{},"改字段、撤销、重做",[45,302,303],{},"只改声明的范围，恢复原拼写",[30,305,306,309,312],{},[45,307,308],{},"输入",[45,310,311],{},"中文组合、删除半个 token、粘贴",[45,313,314],{},"不抢输入，未完成语法保持源码",[30,316,317,320,323],{},[45,318,319],{},"选区",[45,321,322],{},"点击、键盘、拖过预览、搜索",[45,324,325],{},"命中正确源码，拖动过程连续",[30,327,328,331,334],{},[45,329,330],{},"权限",[45,332,333],{},"source\u002Flive 只读、locked",[45,335,336],{},"不能通过组件绕过写保护",[30,338,339,342,345],{},[45,340,341],{},"生命周期",[45,343,344],{},"快速更新、卸载、换文档",[45,346,347],{},"没有迟到结果和资源泄漏",[30,349,350,353,356],{},[45,351,352],{},"视觉",[45,354,355],{},"深浅色、窄屏、放大文字",[45,357,358],{},"使用主题 token，控件可达",[30,360,361,364,367],{},[45,362,363],{},"性能",[45,365,366],{},"光标移动、局部改字、长文件",[45,368,369],{},"不做无关全文扫描或全量重挂载",[10,371,372],{"id":372},"文档示例如何作为起点",[14,374,375],{},"本网站的接入源码与交互示例来自同一组文件，发布时验证依赖闭包，并对 Vue \u002F TypeScript 示例执行类型检查。带服务端端点的 recipe 明确要求宿主实现服务，不会伪造一个成功的后端。",[14,377,378,379,384],{},"复制示例后，先运行其说明中的验收动作，再增加业务字段和外部请求。遇到能力边界请对照 ",[380,381,383],"a",{"href":382},"\u002Fsupport","支持范围","，不要为获得一张正确截图而关闭源码、选区或只读保护。",[386,387,388],"style",{},"html pre.shiki code .sDD9d, html code.shiki .sDD9d{--shiki-default:#D73A49;--shiki-light:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sUNQB, html code.shiki .sUNQB{--shiki-default:#005CC5;--shiki-light:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVPnS, html code.shiki .sVPnS{--shiki-default:#24292E;--shiki-light:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sgQzM, html code.shiki .sgQzM{--shiki-default:#6F42C1;--shiki-light:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sde8i, html code.shiki .sde8i{--shiki-default:#E36209;--shiki-light:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s-HEn, html code.shiki .s-HEn{--shiki-default:#032F62;--shiki-light:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":132,"searchDepth":158,"depth":158,"links":390},[391,392,393,394,395],{"id":12,"depth":158,"text":12},{"id":22,"depth":158,"text":22},{"id":125,"depth":158,"text":125},{"id":264,"depth":158,"text":264},{"id":372,"depth":158,"text":372},"定位未渲染、命令失败、资源泄漏和复杂扩展的交互问题。","md",[399,251,260,400,401],"debug","testing","performance","zh-CN",{},true,8,"\u002Fguide\u002Fdebugging","接入指南",{"title":5,"description":396},"guide\u002Fdebugging.zh-CN","vBSH8hSc7PEi4LvdVfNjaTbY-eGRDJjkIXpF0uXOG30",1793046311417]