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

如何在TinyMCE 6中集成Mustache模板,避免代码被HTML包裹

解决TinyMCE 6改写Mustache模板标签的问题

我们使用TinyMCE 6作为WYSIWYG编辑器,供用户输入后续将用于Mustache变量注入的HTML模板内容,变量替换由后端完成。但发现加载内容到编辑器或通过代码插件保存时,Mustache模板标签会被TinyMCE自动改写,破坏模板逻辑。

原代码示例

<p>
<strong>Scope of Services</strong>
</p>
<ul>
{{#jobs}}
<li>{{short_description}}</li>
{{/jobs}}
{{^jobs}}
<li><em style="color: red;">NO SERVICES HAVE BEEN ADDED TO THIS ENGAGEMENT</em></li>
{{/jobs}}
</ul>

改写后代码(逻辑被破坏)

<p><strong>Scope of Services</strong></p>
<ul>
<li>{{#jobs}}</li>
<li>{{short_description}}</li>
<li>{{/jobs}} {{^jobs}}</li>
<li><em style="color: red;">NO SERVICES HAVE BEEN ADDED TO THIS ENGAGEMENT</em></li>
<li>{{/jobs}}</li>
</ul>

可见Mustache的区块标签被自动包裹进<li>标签,导致模板逻辑失效。


解决方法

方法1:用protect配置保护Mustache标签

通过TinyMCE的protect选项添加正则表达式,匹配所有Mustache标签,让编辑器不对这些内容做修改:

tinymce.init({
  selector: 'textarea',
  // 保护所有{{...}}格式的Mustache标签
  protect: [
    /\{\{.*?\}\}/g
  ],
  // 可选:关闭粘贴自动格式化,避免粘贴时标签被改写
  format_on_paste: false
});

方法2:用script标签包裹模板内容

将Mustache模板放在<script type="text/template">标签内,配置TinyMCE允许该类型的script标签,编辑器会将其视为不可编辑的原生内容,不会修改内部结构:

模板内容示例

<p>
<strong>Scope of Services</strong>
</p>
<ul>
<script type="text/template">
{{#jobs}}
<li>{{short_description}}</li>
{{/jobs}}
{{^jobs}}
<li><em style="color: red;">NO SERVICES HAVE BEEN ADDED TO THIS ENGAGEMENT</em></li>
{{/jobs}}
</script>
</ul>

TinyMCE配置

tinymce.init({
  selector: 'textarea',
  // 允许type为text/template的script标签
  extended_valid_elements: 'script[type=text/template]'
});

方法3:调整内容过滤规则

通过valid_elements或extended_valid_elements放宽内容限制,确保Mustache标签不会被当成无效内容处理:

tinymce.init({
  selector: 'textarea',
  // 允许所有HTML元素,并保留文本中的{{}}格式内容
  valid_elements: '*[*]',
  // 或者更精确地允许Mustache相关内容
  extended_valid_elements: 'span,strong,em,ul,li,p,{{*}}'
});

配置修改后的影响

  • 方法1(protect):

    • 被保护的Mustache标签在可视化编辑器中会被锁定,无法直接编辑,用户需切换到代码视图修改标签内容;
    • 编辑器仍可正常编辑其他HTML内容,排版功能不受太大影响;
    • 正则表达式需准确匹配所有Mustache语法,避免遗漏或误匹配。
  • 方法2(script标签包裹):

    • 模板内容在可视化视图中不可见,用户只能通过代码视图编辑模板,降低了可视化编辑的易用性;
    • 完全避免模板结构被改写,适合对模板完整性要求较高的场景;
    • 后端处理时需额外提取script标签内的模板内容,增加了一点处理成本。
  • 方法3(放宽过滤规则):

    • 编辑器会保留更多原始内容,但可能允许无效HTML或恶意代码输入,需配合后端内容校验;
    • 自动格式化功能可能失效,比如不会自动修复不闭合的标签,需要用户手动保证HTML结构正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 16:47:08