Quartz

在 Quartz v4 知识库中,“HTML 无法展示”通常有两种情况:

  1. 在 Markdown (.md) 文件中写的 HTML 标签(如 <div><iframe>)没有被渲染,而是显示成了代码或纯文本。

  2. 你想直接在知识库里放一个 .html 文件(比如导出的报告),但 Quartz 把它当成 Markdown 处理或直接忽略了。

请根据你的具体需求,选择下面的解决方案:


情况一:在 Markdown 文章中嵌入 HTML (最常见)

如果你想在 .md 文件里写 <div style="color:red">text</div> 或嵌入 <iframe>,你需要开启 Quartz 的混合排版支持。

1. 修改配置文件

打开 quartz.config.ts,找到 Plugin.ObsidianFlavoredMarkdown 配置项,将 enableInHtmlEmbed 改为 true

修改前:

Plugin.ObsidianFlavoredMarkdown({ enableInHtmlEmbed: false }),

修改后:

Plugin.ObsidianFlavoredMarkdown({ enableInHtmlEmbed: true }),

2. 正确的书写姿势

在 Markdown 里写 HTML 时,千万不要缩进(不要在行首加空格或 Tab),否则会被当成代码块。

❌ 错误写法 (会被当成代码):

<div class="card"> 这里是卡片内容 </div>

✅ 正确写法 (顶格写):

<div class="card" style="padding: 20px; background: #f0f0f0; border-radius: 8px;"> <b>这里是卡片内容</b><br> 支持直接写 HTML 样式。 </div>


情况二:托管独立的 HTML 文件 (如 HTML 报告)

如果你有一个现成的 report.html (比如从 Jupyter 或 Python 导出的),想通过链接访问它,不要把它放在 content 文件夹里。

原理:Quartz 会尝试解析 content 下的所有文件。如果它是 .html,Quartz 可能会把它当成乱码的 Markdown 处理或者忽略。

1. 使用 static 文件夹

请将你的 .html 文件放入项目根目录下的 quartz/static/ 文件夹中。
(如果没有 static 文件夹,请手动创建一个)

目录结构示例:

quartz/ ├── content/ ├── quartz/ │ ├── static/ │ │ └── my-report.html <-- 放在这里 │ └── ... └── ...

2. 访问方式

Quartz 构建时,会自动把 static 里的文件原样复制到网站根目录。
启动服务后,你可以通过以下地址访问:
http://localhost:8080/static/my-report.html

(注意:URL 中是否包含 /static/ 取决于你的部署路径,通常是 域名/static/文件名.html 或者直接是 域名/文件名.html,具体看 Quartz 的 Plugin.Static() 配置,默认是复制到 public/static/ 目录下)

默认配置下的访问路径
http://localhost:8080/static/my-report.html

3. 在文章中引用

你可以在 Markdown 文章里用 <iframe> 把这个独立文件嵌进来:

<iframe src="/static/my-report.html" width="100%" height="600px" style="border:none;"></iframe>


情况三:HTML 标签被安全过滤了 (高级)

如果你写的 <script> 标签或复杂的 style 属性不见了,这是因为 Quartz 默认使用了 Rehype Sanitize 插件来防止 XSS 攻击。

如果你完全信任你的内容,并且一定要用复杂的 JS/CSS:
你需要编写一个自定义插件来绕过过滤(不推荐小白尝试),或者把复杂的交互逻辑封装成 React 组件(就像我们之前做 Lightbox 那样),这是最正规的做法。