所有事件
用 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 请参阅配置参考。