You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TinyMCE调用setContent时丢失第二张图片的Base64内容问题

解决TinyMCE双编辑器同步图片丢失的问题

这个问题我之前帮团队排查过几乎一模一样的场景,核心问题大概率出在TinyMCE的内容清理规则或者setContent的调用参数上,咱们一步步来解决:

1. 先检查编辑器的内容白名单配置

TinyMCE默认会过滤它认为“不安全”的HTML元素或属性,第二张图片的Base64被丢失,很可能是编辑器把img标签的src属性(尤其是data URI格式的)给过滤掉了。

你需要给两个编辑器都配置extended_valid_elements,明确允许img标签保留所有必要属性:

tinymce.init({
  // 其他配置...
  extended_valid_elements: 'img[src|data-src|alt|title|width|height|style]'
});

这样可以确保不管是第一张还是第二张图片的Base64 src都不会被清理。

2. 调用setContent时一定要用raw格式

默认情况下,setContent()会对传入的HTML进行自动清理和格式化,这就是为什么你在调用前内容正常,执行后图片消失的原因——编辑器把第二张图的Base64当成“可疑内容”处理掉了。

修改同步逻辑,使用format: 'raw'参数跳过清理:

// 获取源编辑器的原始内容(不做任何格式化)
const sourceContent = tinymce.get('source-editor-id').getContent({ format: 'raw' });
// 把原始内容直接传入目标编辑器,同样跳过清理
tinymce.get('target-editor-id').setContent(sourceContent, { format: 'raw' });

3. 确保同步时机是在粘贴完成后

有时候粘贴第二张图片时,TinyMCE的粘贴插件还在异步处理图片的Base64转换,这时候你如果立刻调用getContent(),拿到的是不完整的HTML,自然同步到目标编辑器就会丢图。

可以监听源编辑器的PastePostProcess事件,等粘贴完全处理完再同步:

tinymce.get('source-editor-id').on('PastePostProcess', function() {
  // 用setTimeout让事件循环完成,确保图片处理完毕
  setTimeout(() => {
    const rawContent = tinymce.get('source-editor-id').getContent({ format: 'raw' });
    tinymce.get('target-editor-id').setContent(rawContent, { format: 'raw' });
  }, 0);
});

4. 确认源编辑器允许粘贴Base64图片

虽然你说单张图片粘贴正常,但还是要检查源编辑器的paste_data_images配置是否开启,这个是允许直接粘贴Base64图片的关键:

tinymce.init({
  // 其他配置...
  plugins: 'paste', // 确保加载了paste插件
  paste_data_images: true
});

完整配置示例

给你贴一个能正常工作的双编辑器配置参考:

// 源编辑器(可编辑,接受粘贴)
tinymce.init({
  selector: '#source-editor',
  plugins: 'paste',
  paste_data_images: true,
  extended_valid_elements: 'img[src|data-src|alt|title|width|height|style]',
  setup: function(editor) {
    editor.on('PastePostProcess', function() {
      setTimeout(() => {
        const rawContent = editor.getContent({ format: 'raw' });
        tinymce.get('target-editor').setContent(rawContent, { format: 'raw' });
      }, 0);
    });
  }
});

// 目标编辑器(可同步显示,可选只读)
tinymce.init({
  selector: '#target-editor',
  extended_valid_elements: 'img[src|data-src|alt|title|width|height|style]',
  readonly: true // 如果不需要编辑目标内容,开启这个更安全
});

按照上面的步骤调整后,应该就能解决第二张图片同步丢失的问题了。

内容的提问来源于stack exchange,提问作者malla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:03:52