真正要保存的是触发高亮的配置、代码块结构和用户偏好;包括highlight.js配置项、带高亮结构的HTML(非纯Markdown)、用户级高亮偏好,且导出HTML必须包含匹配版本的CSS和JS加载逻辑。

动态高亮本身不“保存”,真正要保存的是触发高亮的配置、代码块结构和用户偏好——比如语言标识、高亮主题、是否启用实时渲染等。直接存 hljs.highlightElement() 的调用结果没意义,DOM 一刷新就丢;关键在把可复现高亮行为的要素固化下来。
✅ 保存 highlight.js 配置项(主题、语言映射、自动检测开关)
highlight.js 的行为由初始化配置控制,但默认不提供序列化接口。你需要手动提取并持久化关键字段:
-
hljs.configure()中传入的对象(如{ languages: ['javascript', 'python'], ignoreUnescapedHTML: true })应转为 JSON 存入localStorage或后端 API - 高亮主题 CSS 文件路径(如
github-dark.min.css)需记录文件名或 CDN URL,不能只存“暗色”这种模糊描述 - 若启用了自动语言检测(
language: 'auto'),要明确存下是否允许 fallback 到plaintext,否则流式渲染时可能漏高亮
✅ 导出带高亮结构的 HTML(非纯 Markdown 原文)
用户看到的“高亮效果”实际依赖于转换后的 <pre class="brush:php;toolbar:false;"><code class="js"></code> 结构。导出时必须输出这个结构,而不是原始 <code>```js</code> 文本:</pre>
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 调用
convertMarkdownCodeBlocks()后生成的 HTML 字符串,才是可直接保存为 .html 文件的合法内容 - 导出前务必对
code内容做 HTML 实体转义(&,, <code>>,"),否则<div> 这类代码会破坏 DOM <li>若页面已加载 highlight.js,导出前建议先调用 <code>hljs.highlightAll()确保所有<code>节点都已注入<span class="hljs-keyword"></span>等子节点——但注意:这些 span 是运行时插入的,不属于源 HTML,导出时是否保留取决于需求(通常不保留,靠重载 CSS + JS 复现) - 给每个动态插入的
<pre class="brush:php;toolbar:false;"></pre>添加唯一data-id(如data-id="block-123"),再用localStorage存键值对:{"block-123": {"lang": "typescript", "disabled": false}} - 避免用
innerHTML索引(如第 3 个<pre class="brush:php;toolbar:false;"></pre>),DOM 顺序变动会导致错配 - 如果使用
hljs.highlightElement()单独高亮,记得在调用前读取对应data-id的偏好,覆盖默认 language 属性
✅ 保存用户级高亮偏好(语言选择、禁用某语言)
用户可能手动切换过代码块语言,或关闭了某语言的高亮。这类操作需要绑定到具体代码块实例,并与 DOM 位置关联:
立即学习“前端免费学习笔记(深入)”;
最易被忽略的一点:导出的 HTML 必须包含 highlight.js 的 CSS 和 JS 加载逻辑,否则在离线环境打开就是白底黑字。不要只复制 body 内容,要确保 <link rel="stylesheet"> 和 <script src></script> 标签完整存在,且版本与高亮时一致——混用 v11 和 v12 的 CSS 类名会导致样式失效。


















