为什么 CDATA 包装的内联 Javascript 在 TYPO3 CMS 9.5 中为空?



我们为TYPO3创建了一个第三方扩展。升级到9.5后,我们现在得到一个PHP Warning: Invalid argument supplied for foreach() in [...]/typo3_src-9.5.9/vendor/typo3fluid/fluid/src/Core/Parser/TemplateProcessor/NamespaceDetectionTemplateProcessor.php line 180

经过一些网络研究,我们发现问题是内联Javascript,你只能通过使用正确的CDATA包装来修复它(更多:https://forge.typo3.org/issues/88615(

所以我们尝试过(根据曼努埃尔 https://docs.typo3.org/m/typo3/guide-extbasefluid/master/en-us/Fluid/ThingsToKnow/JsAndInline.html(:

<script>
<![CDATA[
(function($){
alert('test');
})(jQuery);
]]>
</script>

但是现在 CDATA Wrap 之间的一切都在前端返回中完全消失了。此外,如果我们也将脚本标签放在 CDATA 之间。

这也行不通:

<f:format.cdata>
<script type="text/javascript">
(function($){
alert('test');
})(jQuery);
</script>
</f:format.cdata>

尝试:

<script type="text/javascript">
<f:format.cdata>
(function($){
alert('test');
})(jQuery);
</f:format.cdata>
</script>

<f:format.raw>
<script type="text/javascript">
(function($){
alert('test');
})(jQuery);
</script>
</f:format.raw>

更新到 TYPO3 CMS9.5.10LTS 解决了我们遇到的所有问题。

自从 TYPO3 v8 切换到独立的流体解析器以来,流体中的 CDATA 部分被破坏了,这带来了负责删除 CDATA 部分内容的NamespaceDetectionTemplateProcessor

见 https://github.com/TYPO3/Fluid/issues/474

最新更新