为何CKEditor4.16集成ckeditor_wiris输出公式到页面显示为直线?
问题成因
- ckeditor_wiris(MathType)插件的公式渲染逻辑仅在CKEditor内置的编辑iframe沙箱内生效,父页面未加载公式解析所需的本地依赖文件
- 手动插入到父页面的编辑器内容未触发Wiris的DOM解析流程,公式对应的自定义标签、占位元素无法转换为正常的公式展示内容
- 编辑器输出的base64编码公式元数据没有对应解析程序读取,最终显示为空白占位或直线
修复步骤
- 引入本地渲染依赖
所有依赖均为ckeditor_wiris插件自带文件,无需外部资源。在页面head标签内,除已引入的plugin.js外,追加引入两个文件:
- 插件自带的公式样式表:
ckeditor/plugins/ckeditor_wiris/ui/stylesws.css - 插件自带的核心渲染脚本:
ckeditor/plugins/ckeditor_wiris/core/core.js
- 注意:文件路径需和项目内的实际存放路径完全匹配,避免加载404。
- 插入内容后手动触发公式渲染
在点击事件的逻辑中,待内容插入目标DOM后,手动调用Wiris的解析方法处理新增的公式元素,修改后的代码如下:
$(document).ready(function() { $('#submit').click(function(){ var data = CKEDITOR.instances['editor1'].getData(); // 先将编辑器内容插入目标容器 $('#mathtype').html(data); // 触发Wiris对容器内公式的解析渲染 if (window.WirisPlugin && WirisPlugin.MathML) { WirisPlugin.MathML.render(document.getElementById('mathtype')); } }); });
- (可选)补全编辑器输出适配配置
在CKEDITOR.replace的初始化配置中,追加Wiris的适配项,保证输出的公式结构兼容父页面的渲染逻辑:
CKEDITOR.replace( 'editor1', { extraPlugins: 'ckeditor_wiris', allowedContent: true, wirisConfiguration: { // 输出可被父页面脚本解析的公式结构 renderInParent: true } });
排查校验点
- 检查所有Wiris相关依赖文件的加载状态,确认无404、无跨域报错
- 确认渲染调用时机在DOM插入完成后,未提前触发解析
- 不要删除ckeditor_wiris插件目录下core、ui子目录内的自带文件,避免依赖缺失
内容的提问来源于stack exchange,提问作者justmasif
相关产品推荐
相关产品推荐

