LifeRay CMS 7.1注入Matomo追踪脚本遇HTML转义问题求助
解决Liferay 7.1中Matomo追踪脚本被转义的问题
可能的原因与对应修复方法
1. 确认脚本注入字段的类型
Liferay 7.1提供的全站脚本注入字段有明确区分:部分纯文本类字段默认会转义HTML/JS标签,而“页脚HTML”“自定义HTML”这类字段支持直接插入脚本。
- 进入控制面板→站点→站点设置→外观→高级,检查你使用的注入字段,确保选择的是支持HTML/JS的字段(比如“页脚HTML”),而非纯文本字段。
2. 调整主题模板的输出逻辑(自定义主题场景)
如果站点使用自定义主题,模板可能对注入内容做了强制转义:
- Freemarker模板:打开主题的
portal_normal.ftl,找到输出注入内容的代码,将${theme.getLayout().getDescription()}修改为不转义的输出:${theme.getLayout().getDescription('UTF-8', false)?no_esc} - Velocity模板:修改为
$themeDisplay.getLayout().getDescription('UTF-8', false)(第二个参数false表示关闭转义)
3. 检查XSS防护配置
Liferay的XSS防护规则可能拦截了脚本标签,可针对性调整:
- 进入控制面板→配置→系统设置→安全→XSS防护
- 在“允许的HTML标签”中添加
<script>标签(注意:此操作会降低XSS防护级别,仅在完全信任注入内容的前提下操作) - 或检查“过滤模式”,若为“严格模式”,可尝试改为“宽松模式”(需评估安全风险)
4. 直接在主题模板中硬编码脚本(最可靠方案)
如果以上方法无效,直接修改主题模板添加脚本:
- 导出当前主题:控制面板→外观→主题→找到当前使用的主题,点击“导出”
- 解压主题包,找到
src/main/resources/META-INF/resources/templates/portal_normal.ftl(Freemarker)或portal_normal.vm(Velocity) - 在
</body>标签前插入Matomo追踪脚本,示例:<!-- Matomo Tracking Code --> <script type="text/javascript"> var _paq = window._paq = window._paq || []; _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="//your-matomo-url/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '1']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script> <!-- End Matomo Code --> - 重新打包主题为
.zip,上传到Liferay并部署
5. 对比同版本正常站点的配置
既然其他同版本虚拟机的站点可正常运行,重点对比以下差异:
- 两个站点使用的脚本注入字段是否一致
- XSS防护的配置参数是否相同
- 主题是否为同一版本,模板输出逻辑有无区别
内容的提问来源于stack exchange,提问作者Zhronne
相关产品推荐
相关产品推荐

