本文档描述了插件的跨平台自动发文机制的设计原则和实现细节。
所有平台均禁止插件执行最终发布、提交、确认发布等操作。
插件职责仅包括:
最终”发布”动作必须完全由用户手动完成。
| 平台 | 编辑器类型 | 处理策略 |
|---|---|---|
| 知乎 | 富文本(支持 Markdown 粘贴解析) | 填充 Markdown 原文,自动点击”确认并解析”按钮 |
| 掘金 | Markdown (bytemd) | 直接填充 Markdown 原文 |
| CSDN | Markdown (CodeMirror/Monaco) | 直接填充 Markdown 原文 |
| 51CTO | Markdown | 直接填充 Markdown 原文 |
| 博客园 | Markdown (CodeMirror) | 直接填充 Markdown 原文 |
| 简书 | Markdown | 直接填充 Markdown 原文 |
| 阿里云 | Markdown | 直接填充 Markdown 原文 |
| 思否 | Markdown | 直接填充 Markdown 原文 |
| 腾讯云 | Markdown | 直接填充 Markdown 原文 |
对于支持 Markdown 解析的平台(如知乎):
| 平台 | 编辑器类型 | 处理策略 |
|---|---|---|
| B站专栏 | Quill 富文本 | Markdown → HTML 转换后注入 |
| 微信公众号 | UEditor 富文本 | Markdown → 微信优化 HTML 转换后自动注入 |
对于不支持 Markdown 识别、仅支持富文本编辑的平台:
微信公众号的发文流程已进行自动化整合,用户无需再手动在多个页面间切换与复制粘贴。
当用户选择「微信公众号」作为发文平台时,插件自动完成:
mdToWechatHtml 函数,将 Markdown 转换为微信公众号优化的 HTML
<style> 标签)页面打开:自动打开微信公众号编辑页面
标题填充:自动填充文章标题
作者填充:如果配置了作者,自动填充作者字段
每个适配器通过 capabilities 声明平台能力:
capabilities: {
supportsMarkdown: boolean; // 是否支持 Markdown
supportsHtml: boolean; // 是否支持 HTML
// ...
}
contentMarkdownrenderMarkdownToHtmlForPaste() 生成 contentHtmlcontentMarkdowncontentHtml,必要时进行 Quill/UEditor 适配对于知乎等支持 Markdown 粘贴解析的平台:
// 查找并点击"确认并解析"按钮(格式解析确认)
for (let i = 0; i < 15; i++) {
const parseBtn = Array.from(document.querySelectorAll('button')).find((btn) => {
const text = btn.textContent || '';
return text.includes('确认并解析') ||
text.includes('解析为') ||
text.includes('转换为');
});
if (parseBtn) {
parseBtn.click();
break;
}
await sleep(300);
}
对于 B 站专栏等 Quill 编辑器平台,需要将 HTML 规范化为 Quill 可识别的格式:
const normalizeHtmlForQuill = (html: string): string => {
// 代码块:转换为 Quill 的 ql-syntax 格式
// 行内 code:保留标签,补充样式
// 引用:转换为 div + 样式
// 表格:添加基础样式
// ...
};
所有适配器的 fillAndPublish 方法返回统一格式:
return {
url: window.location.href,
__synccasterNote: '内容已填充完成,请手动点击发布按钮完成发布'
};
错误情况:
return {
url: window.location.href,
__synccasterError: {
message: error?.message || String(error),
stack: error?.stack,
},
};