“忘记渲染检查”是 Markdown Here 中的一项安全功能,可防止用户意外发送包含未渲染 Markdown 文本的电子邮件。此功能监控电子邮件撰写区域,检测看起来是 Markdown 的内容,并拦截发送操作以显示确认提示,从而允许用户选择返回并渲染其内容或按原样发送。
“忘记渲染检查”通过对活动撰写区域进行基于间隔的监控来运行。配置后,系统会扫描 Markdown 模式,并在检测到它们时设置用于发送操作的事件拦截器。当用户尝试发送包含似乎是未渲染 Markdown 的电子邮件时,系统会显示一个模态提示,询问他们是否打算在发送前渲染内容。
来源:src/common/common-logic.js143-468 src/chrome/contentscript.js232-265 src/firefox/chrome/content/ff-overlay.js168-225
“忘记渲染检查”使用模式识别来确定内容是否看起来是 Markdown。这有助于防止用户意外发送原始 Markdown 而不是渲染后的内容。
probablyWritingMarkdown 函数分析文本内容中的常见 Markdown 语法模式。
| 模式 | 示例 | 检测规则 |
|---|---|---|
| 项目符号列表 | * 项目 1* 项目 2 | 多行以 *、+ 或 - 开头,后跟空格。 |
| 代码块 | 代码 | 存在反引号字符 |
| 数学表达式 | $公式$ | 被美元符号包围的文本 |
| 加粗 | **粗体** 或 __粗体__ | 双星号或双下划线 |
| 头 | ## 标题 或标题------ | 行以 2-6 个井号开头或以 5 个以上破折号/等号下划线。 |
| 链接 | <FileRef file-url="https://github.com/adam-p/markdown-here/blob/a7dd5c56/text" undefined file-path="text">Hii</FileRef> | 存在 ]( 或 ]<FileRef file-url="https://github.com/adam-p/markdown-here/blob/a7dd5c56/ 模式 |
来源:src/common/common-logic.js143-169 src/common/common-logic.js235-318
扩展加载时,它会根据用户偏好初始化“忘记渲染检查”功能。在 Chrome/Chromium 浏览器中,这发生在内容脚本的间隔检查中。在 Firefox/Thunderbird 中,它在叠加脚本的 onLoad 函数中初始化。
初始化期间的关键步骤是:
来源:src/firefox/chrome/content/ff-overlay.js169-225 src/chrome/contentscript.js234-265
系统会拦截这些发送操作:
拦截通过向相应元素添加事件监听器实现,在事件到达 Gmail/电子邮件客户端处理程序之前捕获事件,并在必要时阻止事件传播。
来源:src/common/common-logic.js235-318 src/common/common-logic.js428-468
在发送尝试期间检测到未渲染的 Markdown 时,扩展程序会显示一个模态对话框,要求用户确认其操作。此对话框根据浏览器以不同的方式实现:
openDialog 使用 XUL 对话框两种实现都提供相同基本功能:
HTML 提示包含使背景变暗、模态居中以及提供警告视觉强调的样式。
来源:src/common/common-logic.js428-468 src/common/forgot-to-render-prompt.html1-140
在 Chrome 浏览器中使用 Gmail 时,系统使用 DOM 选择器查找发送按钮。
[role="button"][tabindex="1"]
它添加了带有 capture: true 的事件监听器,以便在事件到达 Gmail 处理程序之前捕获它们。系统使用直接注入到页面 DOM 中的基于 CSS 的提示。
来源:src/common/common-logic.js130-138 src/chrome/contentscript.js256-263
对于 Thunderbird,实现使用 compose-send-message 事件。
提示使用 Thunderbird 的原生对话框系统显示。
来源:src/firefox/chrome/content/ff-overlay.js169-225 src/common/common-logic.js439-454
系统还包含对 Fastmail 的特定支持,使用不同的选择器来识别发送按钮。
[class~="s-send"]
来源:src/common/common-logic.js133-135
几项优化确保“忘记渲染检查”不会影响浏览器性能:
来源:src/common/common-logic.js143-177 src/common/common-logic.js346-348 src/chrome/contentscript.js265
用户可以通过扩展的选项页面启用或禁用“忘记渲染检查”。该设置作为 forgot-to-render-check-enabled 存储在用户偏好中。
禁用时,间隔检查会提前退出,并且不会设置任何事件拦截器。
来源:src/firefox/chrome/content/ff-overlay.js169-172 src/common/common-logic.js144-146
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(a7dd5c)