拼写检查
在编辑区域中开启浏览器自带的拼写检查器,并提供一个 Spell Check 命令,它可以打开一个由您自己的拼写服务提供数据的审阅面板。编辑器不附带任何词典:没有服务时,检查能力完全取决于用户的浏览器和操作系统,以及它们已安装的语言。


启用
该功能由 spellcheck.js 插件提供(也包含在 plugins/all_plugins.js 中)。按钮为 spellcheck("Spell Check")。它位于 full 工具栏以及默认工具栏的 "more" 面板中,斜杠菜单把它列为 "Spell check"。要把它放到您自己的工具栏中,请把 spellcheck 添加到工具栏字符串中。
加载插件后,原生检查器即已开启,无需其他设置。要获得审阅面板,请为它提供一个解析器:一个接收文档纯文本并返回问题(或解析为问题的 Promise)的函数。
// A stand-in for your spelling service: returns [{ word, offset, length, suggestions }].
var dictionary = { teh: ["the", "tech"], jumpd: ["jumped", "jumps"], befor: ["before", "befog"] };
var editor = new RichTextEditor("#editor", {
toolbar: "full",
spellCheckResolver: function (text) {
var issues = [];
text.replace(/[A-Za-z]+/g, function (w, offset) {
var s = dictionary[w.toLowerCase()];
if (s) issues.push({ word: w, offset: offset, length: w.length, suggestions: s });
});
return Promise.resolve(issues);
}
});
在真实的应用中,解析器会调用您的服务器,由服务器运行 Hunspell 或 LanguageTool 之类的检查器,并把其结果映射为这种格式:
spellCheckResolver: function (text) {
return fetch("/spell", { method: "POST", body: text }).then(function (r) { return r.json(); });
}
选项
| 选项 | 默认值 | 作用 |
|---|---|---|
spellCheckEnabled | true | 编辑器启动时在编辑区域上设置 spellcheck="true" 或 "false"。 |
spellcheck | true | 核心编辑器针对同一属性的开关。只有两个选项都为 true 时,该属性才是 "true"。 |
spellCheckResolver | null | 返回 { word, offset, length, suggestions } 数组(或解析为该数组的 Promise)的 function (text)。没有它时,命令只会开启原生检查器。 |
text_spellcheck、text_spellchecktitle、text_spellchecknative、text_spellcheckclean、text_sp_* | 英文 | 按钮标签、面板标题和消息。语言包会设置它们。 |
使用方法
- 没有解析器。命令会在编辑区域上设置
spellcheck="true",让它获得焦点,并在页面底部显示一条简短的消息:"Browser spell-check is on — misspellings are underlined as you type."(浏览器拼写检查已开启——输入时会为拼写错误加下划线)。如果您以spellCheckEnabled: false启动,这也会重新开启原生检查器。更正通过浏览器自己的上下文菜单进行。 - 有解析器。命令把文档的
innerText发送给解析器,并打开 Spelling 面板。每个问题显示该单词以及最多六个建议。点击一个建议会替换该单词,并把该行变灰。列表为空时显示 "No spelling issues found.",文档为空时显示 "Nothing to check."。 - 解析器被拒绝时显示 "Spell-check service error.";耗时超过 12 秒时显示 "Spell-check timed out.";抛出异常时显示 "Spell-check error."。
注意事项
- 替换是按单词进行的,而不是按位置。建议会替换文档中
word的第一个完整单词匹配(code和pre中的文本会被跳过)。offset和length不会被使用,因此如果一个单词拼错了两次,每次点击都会修正从顶部开始的下一处。 - 替换不是撤销步骤。在 2.6.12 中,点击建议之后撤销,不会恢复原来的单词。
- 语言。插件没有语言设置。原生检查器使用用户浏览器和操作系统的词典;使用解析器时,语言取决于您的服务检查的语言。请从您的页面传入语言,例如
fetch("/spell?lang=fr", …)。 - 您的文本会发送到您的服务。每次检查时,文档的全部纯文本都会传给解析器。插件本身不会向任何地方发送任何内容。
- 不会向保存的 HTML 添加任何内容。
spellcheck属性位于编辑区域上,而不在内容中。