WordPress上的TinyMCE在客户端计算机上行为不端

时间:2017-10-13 18:06:57

标签: wordpress tinymce

我有一个客户在WordPress上遇到了Visual Editor问题,但在我的生活中,我无法复制客户所拥有的问题。

一点背景......

  • 出于样式设计的目的,内容区域中有某些元素 我在文本编辑器中使用硬编码自定义代码/数据属性。一世 主要使用基金会框架(由Zurb),如果你不是 熟悉的,在标记中有html属性,例如' data-tabs'要么 '数据手风琴'在...上启用某些风格组件 前端。
  • 我也在可访问性方面投入了大量精力 我在必要时添加ARIA属性的许多实例。
  • 我的客户处理一些教育分析数据,因此内容区域中嵌入了一些iframe。

我的客户端尝试在Visual Editor中编辑文本内容并且编辑器剥离我放入的任何自定义代码,数据属性并完全删除iframe 时出现问题。

这是我到目前为止所做的事情:

  • 即使在交换项目之前,我已经添加了有效的元素', ' extended_valid_elements'在WordPress过滤器中设置规则&tiny; mn_mce_before_init'允许我想要的任何类型的属性/数据集
  • 自从报道此问题以来,我专门添加了ARIA属性,以确保它不会被删除
  • 对于要移除的iframe,我添加了额外的规则,将iframe指定为任何容器的有效子级,iframe可以包含所有必需的属性
  • 在Visual和Text编辑器之间来回切换(至少在我的环境中),在编辑另一方的内容时保存Visual / Text的进度,自动保存/绘图/强制关闭它并使用浏览器备份不会导致代码/属性/ iframe到目前为止消失(在将项目交给客户端之前以及在我的客户报告问题之后)。
  • 我已在iOS和Windows环境中使用Chrome,Firefox,Internet Explorer,Safari和Opera进行过测试
  • 我问我的客户他们的工作环境是什么样的,我的客户端正在使用Mac,根据我的客户,Firefox / Safari上没有安装adblock或脚本块等浏览器扩展

这是我在客户端报告出现问题之前在过滤器中添加的内容:

$opts = '*[*]';
$initArray['valid_elements'] = $opts;
$initArray['extended_valid_elements'] = $opts;

我添加了额外的并修改了规则,这就是我现在所拥有的(在functions.php中):

$initArray['valid_elements'] = $opts. ',@[role|aria-hidden|aria-checked|aria-selected|aria-pressed|aria-label|aria-labelledby|aria-disabled|aria-grabbed|aria-controls|aria-describedby|aria-required|tabindex|class|style|data-tabs|data-tabs-content|data-equalizer|data-equalizer-watch|data-equalize-on|data-count|data-ratio|frameborder|allowFullScreen|allowfullscreen]';
$initArray['extended_valid_elements'] = 'iframe[title|class|type|width|height|src|frameborder|allowFullScreen|allowfullscreen|data-ratio]';
$initArray['valid_children'] = '+p[iframe],+div[iframe]';
$initArray['invalid_elements'] = '';

我将iframe添加为有效子项,并特别告诉TinyMCE没有无效元素。

......客户端仍然遇到同样的问题,我需要了解为什么会发生这种情况以及如何解决这个问题。

任何人都有类似的经历或者可能对这个问题有答案吗?

编辑:目前正在寻找无插件的解决方案。我想,使用插件没有任何问题,但是如果可以通过编写额外的代码来解决这个问题,那么我宁愿不使用它。

编辑2:目前似乎被删除的iframe是一个更紧迫的问题。从现在开始,我的客户掌握的属性似乎完好无损。

更新:找出问题所在。它与TinyMCE无关。我忽略了一件事,那就是该网站是一个多站点,而该管理员帐户实际上并没有“未过滤”。能力。这是我不知道的事情,现在我知道了。

1 个答案:

答案 0 :(得分:0)

WordPress使用KSES功能清除在TinyMCE中编辑的所有内容。因此,即使您在TinyMCE设置中将某些标签列入白名单,在保存时,WordPress也会使用自己的KSES功能过滤内容,并删除不允许的标签。默认情况下,只有管理员可以在内容中使用IFRAME,对于其他用户,它将在保存时被删除。以下是关于操纵KSES允许在内容中使用的标签的文章:KSES Tricks。使用类似的方法,您可以将IFRAME添加到所有用户的允许标签列表中。