Markdown Here 是一款浏览器扩展,允许用户以 Markdown 语法编写内容,并在发送或发布前将其渲染为格式化的 HTML。此扩展主要用于电子邮件撰写,但也适用于各种 Web 环境,如论坛、博客平台和笔记应用程序。
本文提供了 Markdown Here 的架构、核心组件以及它们在系统中如何交互的技术概述。有关具体的安装说明,请参阅安装和设置。有关详细的功能信息,请参阅功能和特性。
Markdown Here 围绕几个协同工作的关键系统构建,以提供核心功能:
主要组件有:
来源:src/manifest.json src/install.rdf README.md
Markdown Here 的核心功能是用于在 Markdown 和 HTML 之间进行转换的渲染管道。
当用户激活“Markdown 切换”功能时:
MarkdownRender.markdownRender 函数使用 marked.js 解析器处理 Markdown。highlight.js 进行语法高亮。CommonLogic 模块会执行安全检查,例如“忘记渲染”检测。来源:src/common/markdown-here.js src/common/markdown-render.js src/common/mdh-html-to-text.js src/common/common-logic.js
Markdown Here 通过不同的扩展架构支持多种浏览器。
架构因浏览器平台而异:
Chrome/Opera (WebExtension API):
manifest.json:定义扩展属性、权限和内容脚本backgroundscript.js:处理上下文菜单创建和浏览器事件的后台进程contentscript.js:在网页上下文中运行,用于查找和处理可编辑内容Firefox/Thunderbird(旧版 XUL 和 WebExtension):
install.rdf 和 chrome.manifest 用于基于 XUL 的扩展。通用核心组件:
来源:src/manifest.json src/install.rdf src/chrome/backgroundscript.js src/chrome/contentscript.js
Markdown Here 为用户提供灵活的配置系统:
配置系统提供:
这些设置通过 OptionsStore 抽象层,使用浏览器适用的机制(Chrome Storage API、Firefox Preferences 或 localStorage 作为备用)进行存储。
来源:src/common/options.js README.md137-145
| 功能 | 描述 |
|---|---|
| Markdown 渲染 | 将 Markdown 语法转换为格式丰富的 HTML |
| 语法高亮 | 自动高亮显示 100 多种语言的代码块 |
| TeX 数学支持 | 使用 CodeCogs 或其他服务渲染数学公式 |
| 可自定义的样式 | 可配置的渲染输出主题和 CSS |
| 切换功能 | 允许在原始 Markdown 和渲染后的 HTML 之间切换 |
| 多平台支持 | 兼容主流浏览器和电子邮件客户端 |
| 国际化 | 支持 12 种以上语言,包括英语、日语、德语、法语 |
来源:README.md11-18 src/common/CHANGES.md11-14
Markdown Here 旨在与各种浏览器和 Web 应用程序协同工作:
| 浏览器/应用程序 | 支持级别 |
|---|---|
| Chrome | 完全支持 |
| Firefox | 完全支持 |
| Safari | 完全支持 |
| Opera | 完全支持 (v16+) |
| Thunderbird | 完全支持 |
| Gmail | 完全支持 |
| Yahoo 邮件 | 良好支持 |
| Outlook.com/Hotmail | 良好支持 |
| Google 群组 | 良好支持 |
| Blogger | 良好支持 |
| WordPress | 良好支持 |
| 印象笔记网页版 | 良好支持 |
有关更详细的兼容性信息,请参阅支持的平台。
来源:README.md155-157 src/common/CHANGES.md333-338
对于希望使用 Markdown Here 代码库的开发者,该项目使用一个简单的构建系统。
cd utils
node build.js
这将为不同的浏览器平台构建扩展包,生成:
.zip 文件.xpi 文件有关贡献给 Markdown Here 的更多信息,请参阅开发指南。
Markdown Here 利用了几个重要的开源库:
| 库 | 目的 |
|---|---|
| marked.js | Markdown 到 HTML 转换 |
| highlight.js | 代码块语法高亮 |
| jsHtmlToText | HTML 到文本转换 |
这些依赖项已集成到代码库中,为 Markdown 渲染过程提供了基本功能。