MarkdownLib 前置插件
MarkdownLib 是一个把 Markdown 解析能力封装成前置插件的库,任何插件都可以通过 callPlugin 调用它,把 Markdown 文本渲染成 HTML。
- 插件 ID:
top.qomicex.markdown - 版本:
1.2.1 - 依赖:无
- 引入:内嵌
marked v15.0.12,无外部 CDN 依赖(不受 Tauri CSP 限制)
为什么需要它
QML 插件运行在 Tauri WebView 中,打包后 CSP 会拦截所有外部请求与外部<script src> 加载。插件如果直接在 HTML 里引用 CDN 的 marked:
marked 未定义,Markdown 无法渲染。
把 marked 抽成独立前置插件后:
- marked 代码内嵌在 MarkdownLib 插件包内,无需外部 CDN,天然绕过 CSP;
- 多个插件可以共享同一份渲染能力,避免各自内嵌重复代码;
- 通过插件依赖机制管理,版本清晰、可升级。
安装
安装 MarkdownLib 前置插件后,其它插件在manifest.json 声明依赖:
版本支持语法:
>=1.2.0、<=1.2.0、>1.0、<2.0、=1.0.1、精确 1.2.0、多条件空格分隔 ">=1.0 <2.0"。
接口
MarkdownLib 通过registerMethod 暴露以下方法:
renderMarkdown(md)
将完整的 Markdown 文本渲染为 HTML 字符串。
renderMarkdownInline(md)
将行内 Markdown 渲染为 HTML(不包含块级元素)。
stripHtml(html)
去除 HTML 标签,返回纯文本。
调用方法
通过__PLUGIN_API__.callPlugin 调用:
例子
基础渲染
行内渲染 + 去标签
在悬浮窗(overlay)中使用
Overlay 的__PLUGIN_API__ 同样暴露 callPlugin,用法一致。
处理依赖缺失
实现思路
提供方:注册方法
MarkdownLib 的dist/index.html 在插件激活后,通过 registerMethod 把 marked 的能力暴露给插件系统:
registerMethod(methodName, fn)—fn的返回值可以是普通值或 Promise(异步方法同样支持);- 一个插件可注册多个方法;
- 插件停用时所有方法自动注销;
- 方法名建议语义化,避免与其他插件冲突。
调用方:调用方法
依赖方插件通过callPlugin 调用:
为什么内嵌而非 CDN
MarkdownLib 把marked.min.js 内嵌在插件包内,而非通过 <script src="CDN"> 引用:
- 打包后 CSP 安全:外部脚本被拦截,内嵌脚本不受影响;
- 离线可用:不依赖网络;
- 版本锁定:打包进插件,版本确定可复现。
定义原理
插件依赖机制
依赖通过manifest.json 的 dependencies 数组声明,由后端在安装/启动时校验:
__PLUGIN_API__ 上调用 registerMethod 注册方法,方法存于主窗口的 __pluginRegistry。停用插件时对应方法自动移除。
方法注册与调用原理
错误处理
callPlugin 失败会 reject,建议调用方始终 try/catch: