Skip to content

【Bug】消息发送后显示不全,疑似 ${} 变量插值被前端当成代码执行了 #1407

Closed

Description

@yan-sheng-li

Bug 描述:

包含特定语法(${...} 和 HTML 标签)的长文本在发送后,消息气泡内容发生错乱。输入框的内容与最终发送/展示的内容不一致,疑似前端 Markdown 解析或插值语法冲突。

Image

复现步骤:

  1. 在输入框输入文本:<TableOperator v-model="columns" :tableId="TABLE_ID_CONST.BUSINESS.${basic.businessModule.toUpperCase()}.Demo" :refresh="queryData" /> 咋更离谱呢,要不就去掉 ${basic.businessModule.toUpperCase()} 不要这个变量,直接拼后面部分
  2. 点击发送。
  3. 观察消息气泡,发现代码部分被吞掉,或者显示格式完全错乱。

期望结果:

发送出来的文本应该和输入框里的一模一样,即使它包含代码和特殊符号。

Activity

  1. tossp commented on Oct 25, 2026

    @tossp
    Contributor

    我们也遇到了同类情况:直接粘贴 HTML 的 innerHTML / outerHTML 后,消息气泡会把标签当作可渲染内容处理,导致输入内容与展示内容不一致。使用本议题中的 <TableOperator … /> 样例,在 main(e533d9b)也能复现标签内容被吞掉。

    补充一下本次排查结果,供参考:

    • 基础消息接收、SDK 传递和存储链路未发现对这些 HTML / ${…} 内容做求值或转写。${…} 并不是在前端被当作 JavaScript 执行。
    • 用户消息经过 Markdown 渲染,其中的 HTML 又会被 rehypeRaw 解析并经 rehypeSanitize 清理;普通 HTML 可能被渲染,不支持的标签及属性可能被移除。因此,存储的消息正文与气泡的视觉展示需要分开看待。

    我们实现并测试了一个不改变现有默认行为的展示方案:在每条带文字的用户消息下,保留复制、从此处编辑、新会话三个操作,新增第四个动态操作:

    • 默认仍为渲染状态,显示代码图标 + 原文。
    • 切换为纯文本后,显示眼睛图标 + 渲染;HTML 标签、${…}、实体、Markdown 和公式不再进入解析管线。
    • 状态只属于这一条消息;不新增全局设置,不改变模型输入或保存的消息,附件及已有操作保持不变。

    该方案已通过单元测试以及 1280px / 375px 浏览器回归,使用者也已部署测试并反馈正常。对应实现已提交为 #1420,供维护者评估。

    需要明确的是:这提供了查看原文的入口,并未把所有用户消息的默认展示都改成纯文本。因此先作为本议题的补充方案,不预设它已满足本议题的全部预期,也不自动关闭议题。

  2. added a commit that references this issue on Oct 29, 2026
    0a0e72c
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions