← 全部文档

拼写检查

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

编辑器上方的 Spelling 面板:发现 3 个问题,列出 Teh 及建议 the 和 tech、jumpd 及建议 jumped 和 jumps、befor 及建议 before 和 befog,以及一个 Done 按钮
连接了解析器的审阅面板。每个建议都是一个替换该单词的按钮。
编辑器中的一行文本,Teh、jumpd、befor、Anothr 和 sentense 下方有红色波浪线
没有解析器时:浏览器自带的检查器会在用户输入时为拼写错误加下划线(Windows 上的 Chromium)。

启用

该功能由 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(); });
}

选项

选项默认值作用
spellCheckEnabledtrue编辑器启动时在编辑区域上设置 spellcheck="true" 或 "false"。
spellchecktrue核心编辑器针对同一属性的开关。只有两个选项都为 true 时,该属性才是 "true"。
spellCheckResolvernull返回 { 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 属性位于编辑区域上,而不在内容中。

相关内容:拼写检查演示、斜杠命令。