← 全部文档

所有事件

用 editor.attachEvent(name, handler) 监听事件,用 editor.detachEvent(name, handler) 停止监听。在处理函数内部,this 是编辑器实例。少数事件可以取消:它们的第一个参数是一个 state 对象,设置 state.returnValue = true 即表示告诉编辑器您已经处理了该事件。

示例

editor.attachEvent("change", function () {
    document.getElementById("dirty").hidden = false;
});

// Some events let you take over. Set state.returnValue = true to say "handled",
// and the editor skips its own action.
editor.attachEvent("exec_command_newdoc", function (state, cmd, value) {
    state.returnValue = true;
    this.setHTMLCode("<p>New document</p>");
});

editor.detachEvent("change", myHandler);

编辑与生命周期

事件处理函数接收的参数触发时机
ready()从 core 2.6.10 起提供。在编辑器构建完成并加载了初始内容之后触发一次。它是异步触发的,因此在 new RichTextEditor(...) 之后立即附加的处理函数仍然能收到它;之后才附加的处理函数会在下一个 tick 被调用。config.onready 也会收到它。
aftersethtml()从 core 2.6.10 起提供。在 setHTMLCode 替换了内容之后(包括使用 { undoable: true } 时)每次调用触发一次,编辑器从 HTML 源代码视图切换回来时也会触发。显示源代码视图期间不会触发。加载不算编辑:之后不会有 change 事件,您的处理函数所做的刷新会成为已加载文档的一部分。
panelresized(info)从 core 2.6.11 起提供。通过 editor.makePanelResizable 变为可调整大小的侧边面板(批注、大纲等)被拖动边缘或用 ArrowLeft / ArrowRight / Home / End 调整了大小。info 为 { panel, width },即面板元素及其以像素为单位的新宽度。
change()内容发生了变化:输入、命令、粘贴、撤销。经过防抖处理,因此一连串的输入只算一个事件。
contentchange()内容发生了变化,由内容安全插件在完成自身处理之后报告。
selectionchange()光标移动或选区发生了变化,包括选中控件时。
focus(event)编辑区域获得焦点(来自可编辑文档的 focusin)。
blur(event)编辑区域失去焦点(focusout)。
documentreplaced(document)从 core 2.6.10 起提供。编辑框架被移动,现在拥有一个新的 document(有些插件会在启动时把编辑区域包进一个面板中)。通过 editor.bindDocumentEvent / bindEditableEvent 绑定的监听器会自动重新附加;请重新读取您从 getDocument() 或 getEditable() 保存的任何内容。
keydown(event)在编辑区域内按下了某个键。原生 KeyboardEvent 会直接传入。
keyup(event)在编辑区域内松开了某个键。
keypress(event)在编辑区域内按下了某个字符键。
resize()编辑器的大小发生了改变,包括用户拖动缩放角时。
change_html_view(isCodeMode)编辑器在所见即所得视图和 HTML 源代码视图之间进行了切换。
copyheadinglink(url, headingId)用户点击了标题旁边的链接按钮(config.copyHeadingLink)。url 是带有 #headingId 的页面地址;编辑器已经尝试把它复制到剪贴板。
destroy()调用了 destroy()。请在这里断开您自己的监听器和套接字。

命令与对话框

事件处理函数接收的参数触发时机
exec_command(state, command, value)任何命令即将运行时。每个命令都会触发,在下面针对具体命令的事件之后触发。可取消:设置 state.returnValue = true 即可自行处理。
exec_command_<name>(state, command, value)某个具名命令即将运行时,例如 exec_command_newdoc、exec_command_bold。可用它替换该命令。可取消:设置 state.returnValue = true 即可自行处理。
customdialog(state, name, message)编辑器即将显示它自己的某个对话框或警告时,例如 uploadfailed、uploadtoobig、reachmaxlength。可改为显示您自己的对话框。可取消:设置 state.returnValue = true 即可自行处理。
charlimit({ chars, words, overChars, overWords })内容超过了统计插件设置的字符数或字数限制。

上传

事件处理函数接收的参数触发时机
uploadprogress(file, loaded, total)在使用内置上传程序(file_upload_url)且浏览器报告进度时,已发送了一部分字节。
uploadretry(file, attempt, error)上传失败并正在重试,每次尝试触发一次。参见 uploadRetryCount。
uploadcancel(file, reason)上传被取消:"cancel" 表示由 cancelUploads() 取消,"removed" 表示其图片已被删除,或者为 "destroy"。

自动保存

事件处理函数接收的参数触发时机
autosaved(timestamp)config.autoSave 成功保存了内容。
autosavefailed(error, attempt)自动保存失败。第一次失败时 attempt 为 0,之后重试时依次为 1、2……

批注、修订跟踪和修订版本

事件处理函数接收的参数触发时机
comment_added({ id, text, author })添加了一条批注。
comment_resolved({ id })一条批注被标记为已解决。
commentsonlychanged(name, isCommentsOnly)编辑器进入或退出了仅批注模式。
review_decision_denied(detail)没有权限的用户试图接受或拒绝一处修订。
revision_snapshot({ id, label, isNamed, createdAt })修订历史插件保存了一个版本。
revision_history_sync_error(detail)修订历史插件无法连接到它的存储。
linkcheck(issues)链接检查器完成了一轮检查;issues 是它发现的问题数组。

源码构建预览

这些事件存在于较新的源码构建中,并非每个已发布的打包版本或本站当前的演示资源中都有。请使用与之匹配、经过测试的 core/插件构建;附加处理函数并不能为旧的运行时增加事件。

取决于版本的事件通知

事件处理函数接收的参数触发时机
autolink(href, typedText)较新的源码 core 构建:在输入的文本被转换为链接之后触发。href 是生成的地址;typedText 是原始单词。这是一个通知,而不是可取消的“链接前”钩子。较早发布的 core 可能不会触发它。
comment_reacted({ id, emoji, user })较新的批注表情回应插件构建:有人在批注上切换了一个表情。id 是批注 id,user 是当前用户 id 的字符串形式。添加和移除回应都会触发;回应后的结果状态请从 reviewLedger 中读取该条目的 reactions。它不会发送电子邮件,也不会授权任何服务器操作。

上传、自动保存和审阅事件需要加载相应的功能/插件。拦截命令请参阅 exec_command,上传选项请参阅上传文件,autoSave 请参阅配置参考。