快速入门
先在页面上放一个使用默认工具栏的编辑器。首先让输入和格式设置正常工作;上传、AI 和协作以后再添加。各框架专用的包装组件(React、Vue、Angular、Svelte、Blazor、ASP.NET、PHP)请参阅下载。
您需要哪种设置?
- 新的示例应用:使用分步 React 入门项目。
- 现有的框架应用:按照 React、Angular 或 Next.js 指南操作。
- 普通 HTML 页面:从下面选择一种安装方式,然后创建编辑器。
成功的标志是:能够输入文字、选中文字并应用粗体。读取 HTML 是下一步;要永久保存它,则需要您应用的后端。
已经尝试过但卡住了?请查看下面的设置问题。1. 获取编辑器
有三种途径。CDN 完全不需要安装,是看到编辑器运行起来最快的方式;另外两种是生产部署所采用的方式。
方式 A——下载授权版打包文件
访问 /download,获取适用于您所用框架的打包文件。把它解压到您的站点中,使编辑器位于 /richtexteditor/:
your-site/
├── richtexteditor/
│ ├── rte.js ← protected production build (~410 KB)
│ ├── rte_theme_default.css
│ ├── plugins/
│ │ ├── all_plugins.js ← AI Toolkit, comments, slash, mentions, etc.
│ │ ├── aitoolkit.css
│ │ ├── crdt-engine.min.js ← Per-node Yjs CRDT (load only if you use collab)
│ │ └── ...
│ └── lang/ ← optional translations
└── your-page.html方式 B——npm(推荐)
npm install @richscripts/richtexteditor
# or scaffold a complete working example app:
npm create @richscripts/richtexteditor my-app -- --react # also: --vue, --angular, --svelte然后在构建流程中导入样式和打包文件:
// Side-effect import attaches `RichTextEditor` to `window`.
import "@richscripts/richtexteditor/richtexteditor/rte.js";
import "@richscripts/richtexteditor/richtexteditor/plugins/all_plugins.js";
// Or via the typed React wrapper (Vue / Angular wrappers shipped too):
import { RichTextEditorComponent } from "@richscripts/richtexteditor/react";方式 C——CDN,无需安装
jsDelivr 和 unpkg 都镜像了已发布的 npm 包,因此在一个空 HTML 文件中加两个标签就能得到一个可用的编辑器——无需下载、无需构建步骤、无需账户。把下面的代码粘贴到 CodePen 中即可运行:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/rte_theme_default.min.css" />
<script src="https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/rte.js"></script>
<div id="div_editor1">Hello RichTextEditor</div>
<script>
var editor1 = new RichTextEditor("#div_editor1");
</script>这样就有了核心编辑器及其工具栏。再加一个标签即可获得完整的插件集——AI Toolkit、批注、斜杠命令、提及、布局表格等:
<script src="https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/plugins/all_plugins.min.js"></script>一行可选的代码。编辑区域会在您自己的源上请求它的内容样式表 /richtexteditor/runtime/richtexteditor_content.css,而只使用 CDN 的页面上没有这个文件,因此您会在网络面板中看到一个 404。这不会造成任何问题——编辑器以内联方式携带了同样的默认样式,无论哪种情况编辑区域都有样式——但您可以把它指向 CDN 上的副本,这个请求就会消失:
var editor1 = new RichTextEditor("#div_editor1", {
contentCssUrl: "https://cdn.jsdelivr.net/npm/@richscripts/richtexteditor@2.16.0/richtexteditor/runtime/richtexteditor_content.css"
});固定版本。上面的每个路径都有意写明了 @2.16.0:固定版本的 URL 是不可变的,会被缓存一年,因此您的页面不会在不知情的情况下发生变化。@2 会解析为最新的 2.x 版本,在评估期间很有用,但在生产环境中并不明智。把主机换成 https://unpkg.com/,同样的路径也能使用。
或者从我们的域名提供。同样的文件也发布在 cdn.richtexteditor.com 上——与本站自身运行的构建逐字节相同,缓存在 Cloudflare 的边缘节点,您和我们之间没有任何第三方:
<link rel="stylesheet" href="https://cdn.richtexteditor.com/richtexteditor/rte_theme_default.min.css" />
<script src="https://cdn.richtexteditor.com/richtexteditor/rte.js"></script>
<script src="https://cdn.richtexteditor.com/richtexteditor/plugins/all_plugins.min.js"></script>代价在于版本固定,而且方向正好相反。这些路径不带版本号,因此总是提供当前版本,您无法让页面停留在旧版本上;浏览器会被告知每四小时重新检查一次。上面的 jsDelivr URL 按版本不可变,如果您需要在几个月后重现某个构建,这正是您想要的。如果不想在页面中引入第三方,请使用 cdn.richtexteditor.com;如果需要把版本固定下来,请使用固定版本的 jsDelivr URL。
上线之前有两点值得了解。CDN 是为您的页面提供文件的第三方——用于试用、原型和问题报告很方便,但上面的自托管方式才能让编辑器完全留在您自己的基础设施中,而这正是永久授权的意义所在。此外,CDN 改变的是文件到达浏览器的方式,而不是您被授权如何使用这些文件;请参阅 /license。
2. 添加脚本并创建第一个编辑器
<link rel="stylesheet" href="/richtexteditor/rte_theme_default.css" />
<script src="/richtexteditor/rte.js"></script>
<script src="/richtexteditor/plugins/all_plugins.js"></script>
<div id="div_editor1">Hello RichTextEditor</div>
<script>
var editor = new RichTextEditor("#div_editor1");
</script>这样就有了一个使用默认工具栏、可以正常工作的编辑器。在浏览器中打开它,开始输入吧。
3. 自定义工具栏
把一个配置对象作为第二个参数传入:
var editor = new RichTextEditor("#div_editor1", {
toolbar: "basic", // "basic" | "full" | "mobile" | "custom"
height: "500px",
showStatistics: true, // word / character count in the bottom bar
showFloatTextToolBar: true
});如需使用显式分组的自定义工具栏:
var editor = new RichTextEditor("#div_editor1", {
toolbar: "custom",
toolbar_custom:
"{bold,italic,underline}|" +
"{insertorderedlist,insertunorderedlist}|" +
"{insertlink,insertimage}|" +
"{aiassist,aichat}|" +
"{undo,redo}"
});所有命令名称见工具栏与菜单项参考。
4. 读取和写入内容
// Get the current HTML
var html = editor.getHTMLCode();
// Replace the editor's content
editor.setHTMLCode("<p>New content</p>");
// Get plain text (no markup)
var text = editor.getPlainText();
// Get a structured-content JSON document (lossless round-trip with setJSON())
var json = editor.getJSON();
editor.setJSON(json);5. 通过表单提交内容
如果编辑器位于 <form> 中,RichTextEditor 会自动把编辑器的 HTML 写入一个与编辑器容器 id 对应的隐藏字段。在服务器端,像读取任何其他表单字段一样从请求中读取它即可。对于动态提交,请在提交处理函数中调用 editor.getHTMLCode():
document.getElementById("save").addEventListener("click", function () {
fetch("/api/save", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ html: editor.getHTMLCode() })
});
});入门时遇到问题?
- 无法识别 npm
- 安装带有 npm 的 Node.js,重新打开终端,然后检查
node --version和npm --version。如果安装时报告引擎不受支持,请使用入门项目依赖所支持的 Node 版本。 - 示例无法启动
- 在
npm install完成之后,在包含package.json的文件夹中运行命令。React 入门项目使用npm run dev;Angular 入门项目使用npm start。打开终端中打印出的 URL。 - 编辑器是空白的,或者提示 RichTextEditor is not defined
- 查看浏览器控制台中的第一个错误,以及网络面板中失败的脚本请求。确认运行时 URL 加载的是 JavaScript,而不是 404 或 HTML 回退页面。在普通 HTML 中,请在编辑器容器存在之后、创建编辑器之前加载运行时。
- 工具栏看起来没有样式
- 检查编辑器主题样式表是否成功加载。样式表和脚本要来自同一个编辑器版本。
- 刷新之后内容消失了
- 读取 HTML 并不会把它保存到数据库。上面的
/api/saveURL 是一个需要您自己实现的示例端点;请检查它的响应,并在重新打开编辑器时加载保存的 HTML。
请联系技术支持,并提供您的框架和编辑器版本、失败的命令或操作、第一条错误消息,以及一个可重现问题的小示例。分享之前,请删除 API 密钥、密码和私人文档内容。
6. 选择下一步
AI Toolkit
从工具栏使用 Ask AI,停靠 AI Chat 面板,在 AI Review 抽屉中排队处理建议。在服务器上用一行依赖注入接入 OpenAI / Anthropic / Azure,或者传入一个客户端的 setResolver() 回调。
按节点同步的 Yjs CRDT
同一段落的并发输入不会产生合并冲突。向 editor.collab.attach() 传入 textSync: "crdt",配合您自托管的任何 Yjs 提供程序即可。
框架包装组件
为 React、Vue、Angular、Svelte、Blazor Server、ASP.NET Core、ASP.NET Web Forms、Classic ASP 和 PHP 提供原生绑定。同一个编辑器,在您选择的技术栈中提供符合习惯的接口。
rte.js 的顶部是可编辑的普通 JavaScript
每个 rte.js 打包文件的顶部都有一个以普通 JavaScript 编写的 RTE_DefaultConfig 块,其后是授权的编辑器代码。用任意文本编辑器打开 rte.js,修改 RTE_DefaultConfig.skin、默认 toolbar、语言默认值、上传 URL 等值——这些设置有意保持可编辑,因此无需重新运行任何构建流程,就能在全站范围内自定义行为。