尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Voyager 的 Markdown 渲染修复:自动修复 Gemini 界面中被 HTML 注入打断的加粗语法

Voyager 的 Markdown 渲染修复:自动修复 Gemini 界面中被 HTML 注入打断的加粗语法 Voyager 的 Markdown 渲染修复自动修复 Gemini 界面中被 HTML 注入打断的加粗语法【免费下载链接】voyagerEnhancement suite for Gemini, AI Studio, Claude ChatGPT — plus a prompt manager for any websites, DeepSeek Harness included. / 面向 Gemini、AI Studio、Claude 与 ChatGPT 的增强套件其中的提示词管理器可用于任意网站如 DeepSeek Harness。项目地址: https://gitcode.com/gh_mirrors/ge/voyagerGemini 网页界面在渲染回答时有时会把引用来源、高亮标记等 HTML 元素直接插入文本中间导致 Markdown 加粗语法**text**被拆散而无法正确渲染。Voyager 内置的 Markdown Rendering Fix 功能通过内容脚本中的 DOM 修补器自动识别并修复这些被破坏的加粗标记无需任何配置即可让回答内容干净、准确地呈现。读完本文你将理解这一功能的触发机制、两阶段修复算法的具体实现以及它如何通过跳过区规则与测试用例保证只修坏标签、不误伤正常内容。问题背景为什么加粗会渲染失败官方说明见 Markdown Rendering Fix 指南。问题根因在于Gemini 的前端并不是把整段回答作为纯文本渲染的它会在文本流中间插入带有data-path-to-node等属性的元素节点例如引用来源标记、高亮标记。当一段**加粗内容**恰好被这类注入元素从中间切开时DOM 会呈现如下结构TextNode(研究**) → b>/\*\*([^\s].*?[^\s]|[^\s])\*\*/g匹配所有完整配对。这个正则刻意要求星号内侧紧邻非空白字符从而避免把** 、 **这类残缺标记误判为加粗。命中后函数把原文本节点替换为一个DocumentFragment前导普通文本 strong加粗内容/strong 后导普通文本。由于matchAll带g标志一个节点内的多段加粗如**One** and **Two**会一次全部修复。阶段二跨节点加粗split-node这是真正处理被 HTML 注入打断的核心路径。阶段一处理完后若文本节点尾部仍残留一个未配对的**说明加粗内容被后续节点切走了算法会从该节点向后遍历兄弟节点收集中间节点直到遇到下一个含**的文本节点作为结束标记中间节点只接受两类普通文本节点或带data-path-to-node属性的元素节点这正是 Gemini 注入来源/高亮标记的指纹与 源码顶部注释 描述的目标模式一致遇到未知节点类型立即停止避免误吞无关内容MAX_WALK 10的步数上限index.ts#L125防止在异常 DOM 上走得太远。配对成功后重建步骤是创建strong插入到第一个中间节点之前把起点标记之后的文本、全部中间节点、结束标记之前的文本依次移入strong最后把两个原始文本节点截去各自的**标记。整个过程包在try/catch中失败时通过LoggerService记录错误子日志名MarkdownPatcher而不中断页面。以 issue #507 的复现场景 为例DOM 输入为研究** b contenteditable="false">【免费下载链接】voyagerEnhancement suite for Gemini, AI Studio, Claude ChatGPT — plus a prompt manager for any websites, DeepSeek Harness included. / 面向 Gemini、AI Studio、Claude 与 ChatGPT 的增强套件其中的提示词管理器可用于任意网站如 DeepSeek Harness。项目地址: https://gitcode.com/gh_mirrors/ge/voyager创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表