处理编辑器事件
TinyMCE 支持多种类型的事件,可用于编辑器和插件。
支持的浏览器原生事件
编辑器核心事件
插件事件
编辑器管理器事件
以下示例展示了如何在 TinyMCE 中使用支持的原生事件、编辑器核心事件和插件事件。编辑器管理器事件使用 tinymce.on 单独处理,而非 editor.on。
定义事件处理程序
事件处理程序可以通过 editor.on 方法在任意位置初始化,如下例所示:
tinymce.activeEditor.on('click', (e) => {
console.log('编辑器被点击,位置:' + e.pageX + ', ' + e.pageY);
});setup 和 init_instance_callback 选项
设置事件的常见用法是使用 setup 和 init_instance_callback 选项。这些选项允许你在编辑器实例初始化之前和之后绑定事件。
setup 选项可用于在编辑器实例初始化之前绑定事件。
init_instance_callback 选项可用于在编辑器实例初始化之后绑定事件。
init_instance_callback在功能上等同于在setup选项中为init事件绑定事件监听器。
例如,以下代码:
tinymce.init({
selector: 'textarea',
setup: (editor) => {
editor.on('init', (e) => {
console.log('编辑器已初始化。');
});
}
});等同于:
tinymce.init({
selector: 'textarea',
init_instance_callback: (editor) => {
console.log('编辑器已初始化。');
}
});有关这些选项的更多信息,请参阅 setup 和 init_instance_callback。
在编辑器初始化前绑定事件
以下示例使用 setup 选项在编辑器实例初始化之前绑定事件。这是一个处理不返回数据的事件(如 ResizeEditor 编辑器事件)的示例。因此,e 参数未被使用。
tinymce.init({
selector: 'textarea',
setup: (editor) => {
editor.on('ResizeEditor', (e) => {
console.log('编辑器大小已调整。');
});
}
});在编辑器初始化后绑定事件
以下示例使用 init_instance_callback 选项在编辑器实例初始化之后绑定事件。这是一个处理返回数据的事件(如 ExecCommand 事件)的示例。因此,我们可以使用 e 参数来访问事件返回的数据。
tinymce.init({
selector: 'textarea',
init_instance_callback: (editor) => {
editor.on('ExecCommand', (e) => {
console.log(`触发了 ${e.command} 命令。`);
});
}
});示例:内容更改回调
要在编辑器内容更改时运行回调,请在 setup 选项中使用 Change 事件和 editor.on():
tinymce.init({
selector: 'textarea',
setup: (editor) => {
editor.on('change', () => {
console.log('内容已修改。');
});
}
});当内容更改被提交时(例如,当焦点从编辑器移开时),会触发 Change 事件。如需在用户输入时实时更新,请改用 input 事件。
支持的浏览器原生事件
TinyMCE 支持以下浏览器原生事件。点击事件名称查看详情(链接打开 MDN Web 文档)。
编辑器核心事件
以下事件由 TinyMCE 编辑器提供。
| 名称 | 数据 | 描述 |
|---|---|---|
activate |
| 当编辑器被激活时触发。 |
deactivate |
| 当编辑器被停用时触发。 |
remove | N/A | 在编辑器被移除/销毁之前触发。 |
detach | N/A | 在移除事件之后,编辑器容器从 DOM 中分离之前触发。 |
init | N/A | 当编辑器完全初始化时触发。 |
ScrollIntoView |
| 当某个元素即将滚动到可视区域时触发。 |
AfterScrollIntoView |
| 当某个元素已经滚动到可视区域时触发。 |
ObjectResized |
| 当对象(例如图像)完成调整大小操作时触发。 |
ObjectResizeStart |
| 当对象(例如图像)即将调整大小时触发。 |
SwitchMode |
| 当编辑器模式更改时触发。可用模式为 "design"(设计)和 "readonly"(只读)。其他模式可以通过 TinyMCE API 'tinymce.activeEditor.mode.register()' 进行注册。 |
DisabledStateChange | { state: boolean } | 当编辑器禁用模式状态改变时触发。 |
ScrollWindow | (与原生 scroll event 的数据相同) | 当窗口滚动时触发。 |
ResizeWindow | (与原生 resize event 的数据相同) | 当窗口大小调整时触发。 |
BeforeExecCommand |
| 在执行命令之前触发。 |
ExecCommand |
| 在执行命令之后触发。 |
NodeChange |
| 当编辑器内容中所选节点发生变化时触发。 |
FormatApply |
| 在应用格式后触发。 |
FormatRemove |
| 在移除格式后触发。 |
ShowCaret |
| 在编辑器中显示伪光标元素之前触发。伪光标将出现在通常不显示光标的位置,例如表格的开头或结尾以及不可编辑内容处。 |
SelectionChange | 不适用 | 当编辑器中的内容选择发生变化时触发。 |
ObjectSelected |
| 当在编辑器中选择了一个对象(如图像)且选择元素已渲染时触发。 |
BeforeObjectSelected |
| 当在编辑器中选择了一个对象(如图像)但在其渲染为已选状态之前触发。 |
GetSelectionRange |
| 当从编辑器获取选择范围时触发。 |
SetSelectionRange |
| 在编辑器中设置选择范围之前触发。 |
AfterSetSelectionRange |
| 在编辑器中设置选择范围之后触发。 |
BeforeGetContent |
| 在编辑器内容序列化之前触发。 |
GetContent |
| 在编辑器内容序列化之后触发。 |
BeforeSetContent |
| 在内容解析并渲染到编辑器之前触发。 |
SetContent |
| 在内容解析并渲染到编辑器之后触发。注意: |
LoadContent | 不适用 | 在初始内容加载到编辑器之后触发。 |
PreviewFormats | 不适用 | 当在编辑器中预览格式时,在生成格式 CSS 之前触发。 |
AfterPreviewFormats | 不适用 | 当在编辑器中预览格式时,在生成格式 CSS 之后触发。 |
ScriptsLoaded | 不适用 | 当编辑器运行所需的所有脚本(如插件和主题)加载完成时触发。 |
PreInit | 不适用 | 在加载编辑器之后且开始加载编辑器内容之前触发。 |
PostRender | 不适用 | 在主题渲染完成后触发。 |
NewBlock |
| 当在编辑器中创建新块时触发,例如用户按下回车键时。 |
ClearUndos | 不适用 | 当撤销级别被清除时触发。 |
TypingUndo | 不适用 | 当通过在编辑器中输入内容创建新的撤销级别时触发。 |
Change |
| 当编辑器内容变更被提交时触发,例如焦点移出编辑器时。 |
Redo |
| 当变更被重新应用时触发。 |
Undo |
| 当变更被撤销时触发。 |
BeforeAddUndo |
| 在创建新的撤销级别之前触发。 |
AddUndo |
| 在创建新的撤销级别之后触发。 |
Dirty | 不适用 | 当编辑器从“原始”状态转换为“脏”状态时触发。当自初始化或上次保存状态以来创建了一个撤销级别时,编辑器即为“脏”状态。要检查编辑器是否为“脏”状态,请使用 |
CloseWindow |
| 当对话框关闭时触发。 |
OpenWindow |
| 当对话框打开时触发。 |
ProgressState |
| 当使用TinyMCE API |
AfterProgressState |
| 编辑器进度状态更改后触发,且新的进度状态生效。 |
PreProcess |
| 在将DOM节点序列化为HTML内容之前触发。 |
PostProcess |
| 在将DOM节点序列化为HTML内容之后触发。 |
SetAttrib |
| 当使用编辑器 DOMUtils API 更新属性时触发。 |
ResizeEditor | N/A | 当编辑器大小调整时触发,无论是通过调整大小手柄还是自动调整大小插件。在TinyMCE 6.1及更高版本中,当切换全屏模式时也会触发此事件。切换全屏模式需要启用 |
SkinLoaded | N/A | 当编辑器皮肤加载完成时触发。 |
SkinLoadError |
| 当编辑器皮肤加载失败时触发。 |
ThemeLoadError |
| 当编辑器主题加载失败时触发。 |
ModelLoadError |
| 当编辑器模型加载失败时触发。 |
PluginLoadError |
| 当编辑器插件加载失败时触发。 |
IconsLoadError |
| 当编辑器图标包加载失败时触发。 |
LanguageLoadError |
| 当编辑器语言包加载失败时触发。 |
BeforeRenderUI | N/A | 在渲染主题UI之前触发。 |
ToggleSidebar | N/A | 当侧边栏被打开/关闭切换时触发。 |
SidebarResizeStart | N/A | 当用户开始拖动侧边栏的调整大小手柄时触发。此事件要求侧边栏注册时 |
SidebarResized |
| 当用户停止拖动侧边栏的调整大小手柄时触发。 |
longpress | (Same data as the native touchstart event) | 当在编辑器内的触摸设备上发生长按操作时触发。 |
tap | (Same data as the native touchend event) | 当在编辑器内的触摸设备上发生点击操作时触发(模拟类似click的事件)。 |
ScrollContent | (Same data as the native scroll event) | (仅限iframe模式) 当iframe窗口内的内容滚动时触发。 |
ResizeContent | (Same data as the native resize event) | (仅限iframe模式) 当iframe窗口大小调整时触发。 |
Load | N/A | (仅限iframe模式) 当编辑器iframe内容加载完成时触发。 |
ResolveName |
| (仅限iframe模式) 当编辑器尝试解析元素的名称以渲染状态栏路径时触发。 |
BeforeOpenNotification |
| 在显示通知之前触发。有关通知规范( |
OpenNotification |
| 在显示通知之后触发。有关通知API( |
PastePreProcess |
| 在从剪贴板解析内容之前触发。 |
PastePostProcess |
| 在从剪贴板解析内容之后但在添加到编辑器之前触发。 |
PastePlainTextToggle |
| 纯文本粘贴模式状态发生变化时触发。 |
AutocompleterStart |
| 当自动完成器被触发且应显示获取的建议时触发。 |
AutocompleterUpdate |
| 当内容发生变化且活动的自动完成器需要更新显示的建议时触发。 |
AutocompleterEnd | N/A | 当活动的自动完成器菜单即将关闭时触发。 |
NewRow | N/A | 当创建新的表格行时触发。 |
NewCell | N/A | 当创建新的表格单元格时触发。 |
TableModified |
| 当表格发生样式或结构更改时触发。 |
TableSelectionClear | N/A | 当表格选择被清除时触发。 |
StylesTextUpdate |
| 当 |
BlocksTextUpdate |
| 当 |
AlignTextUpdate |
| 当 |
FontSizeTextUpdate |
| 当 |
FontSizeInputTextUpdate |
| 当 |
FontFamilyTextUpdate |
| 当 |
插件事件
以下插件提供事件。
无障碍检查器事件
自动保存事件
字符映射事件
评论事件
格式刷事件
全屏事件
导入 CSS 事件
链接检查器事件
列表事件
媒体嵌入事件
永久笔事件
PowerPaste 事件
拼写检查器事件
修订历史事件
拼写自动更正事件
可视化块事件
可视化字符事件
字数统计事件
无障碍检查器事件
以下事件由无障碍检查器插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
A11ycheckStart | N/A | 当无障碍检查器 |
A11ycheckStop | N/A | 当无障碍检查器 |
A11ycheckIgnore | N/A | 当按下 |
A11ycheckRepair | N/A | 当按下 |
A11ycheckShowDetails | N/A | 当按下 |
自动保存事件
以下事件由自动保存插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
RestoreDraft | N/A | 当草稿已恢复时触发。 |
StoreDraft | N/A | 当草稿已保存时触发。 |
RemoveDraft | N/A | 当草稿已从内存中移除时触发。 |
字符映射事件
以下事件由字符映射插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
InsertCustomChar |
| 在特殊字符插入编辑器之前触发。 |
评论事件
以下事件由Tiny 评论插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
mce-tinycomments-update | N/A | 当评论侧边栏打开或关闭时触发。 |
CommentChange |
| 当添加、解决、删除、编辑或回复评论时触发。 |
格式刷事件
以下事件由格式刷插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
FormatPainterToggle |
| 当格式刷状态改变时触发。 |
全屏事件
以下事件由全屏插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
FullscreenStateChanged |
| 当全屏状态改变时触发。 |
导入CSS事件
以下事件由导入CSS插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
AddStyleModifications |
| 当编辑器初始化期间从CSS中解析出样式修改时触发。 |
链接检查器事件
以下事件由链接检查器插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
LinkCheckerError |
| 当发生链接检查器错误时触发,例如无法连接到链接检查器服务。 |
列表事件
以下事件由列表插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
ListMutation |
| 当列表切换开启/关闭时触发。 |
媒体嵌入事件
以下事件由媒体嵌入插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
MediaEmbedError |
| 当发生媒体嵌入错误时触发,例如无法连接到媒体嵌入服务。 |
永久钢笔事件
以下事件由永久钢笔插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
PermanentPenToggle |
| 当永久钢笔状态改变时触发。 |
PermanentPenProperties |
| 当永久钢笔属性改变时触发。 |
PowerPaste事件
以下事件由PowerPaste插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
PastePreProcess |
| 在内容从剪贴板解析之前触发。 |
PastePostProcess |
| 在内容从剪贴板解析之后,但在添加到编辑器之前触发。 |
PastePlainTextToggle |
| 当纯文本粘贴模式状态改变时触发。 |
修订历史事件
以下事件由修订历史插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
VersionRestored |
| 当版本被恢复时触发。 |
拼写检查器事件
以下事件由拼写检查器插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
SpellcheckerIgnore |
| 当单词的单个实例被标记为忽略时触发。 |
SpellcheckerIgnoreAll |
| 当单词(在某种语言中)的所有实例被标记为忽略时触发。 |
SpellcheckError |
| 当发生拼写检查器错误时触发,例如当无法连接到拼写检查器服务时。 |
SpellcheckStart | N/A | 当启用拼写检查时触发。 |
SpellcheckEnd | N/A | 当禁用拼写检查时触发。 |
SpellcheckerLanguageChanged |
| 当拼写检查语言更改时触发。 |
SpellcheckerUpdated |
| 当编辑器内容被检查拼写错误时触发,并在 |
拼写自动校正事件
以下事件由 拼写自动校正插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
AutocorrectStart | 无 | 当自动校正从关闭状态开启时触发。 |
AutocorrectEnd | 无 | 当自动校正从开启状态关闭时触发。 |
CapitalizeStart | 无 | 当大写功能从关闭状态开启时触发。 |
CapitalizeEnd | 无 | 当大写功能从开启状态关闭时触发。 |
可视化区块事件
以下事件由 可视化区块插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
VisualBlocks |
| 当可视化区块状态发生变化时触发。 |
可视化字符事件
以下事件由 可视化字符插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
VisualChars |
| 当可视化字符状态发生变化时触发。 |
字数统计事件
以下事件由 字数统计插件提供。
| 名称 | 数据 | 描述 |
|---|---|---|
WordCountUpdate |
| 当编辑器字数统计更新时触发。 |
编辑器管理器事件
以下事件用于编辑器管理。这些事件通过 tinymce.on 处理,而不是通过 editor.on 或 editor.fire ,如示例“处理编辑器管理器事件”所示。
| 名称 | 数据 | 描述 |
|---|---|---|
AddEditor |
| 当创建新的编辑器时触发。 |
RemoveEditor |
| 当编辑器被移除/销毁时触发。 |
BeforeUnload | 无 | 在浏览器窗口关闭前触发(与原生 |
示例:处理编辑器管理器事件
AddEditortinymce.on('AddEditor', (e) => {
console.log('Added editor with id: ' + e.editor.id);
});RemoveEditortinymce.on('RemoveEditor', (e) => {
console.log('Removed editor with id: ' + e.editor.id);
});