上次更新日期:
2021年4月29日
AEM UI 最佳实践
调试 UI 问题
- AEM Chrome 扩展功能 - 可在非生产环境中,利用这项浏览器扩展功能来调试 UI 加载速度缓慢或 UI 断开的原因。该扩展功能允许您查看页面加载期间,Sling 请求的处理过程(执行的过滤器、使用的 Servlet、错误处理程序、组件、Sling 资源等),以及执行的任何 JCR 查询。
- 调试触屏 UI 中的客户端问题 - 提供了各种调试客户端问题的步骤。
- 运用 AEM 开发人员模式来调试组件问题 - 适合在开发环境或非生产环境中调试组件。
Clientlib 问题
什么是 AEM 中的 Clientlib - 现代网站严重依赖由复杂的 JavaScript 和 CSS 代码所驱动的客户端处理过程。整理并优化这类代码提供的服务,可能是一个错综复杂的问题。
为了有助于解决这个问题,AEM 提供了客户端库文件夹,这些文件夹允许您执行以下操作:将客户端代码存储在存储库;对客户端代码进行分类整理;定义何时以及怎样将每个类别的代码提供给客户端。随后,客户端库系统将负责在最终网页上生成正确的链接,以加载正确的代码。
嵌入的某个 Clientlib 无法加载:
执行下列步骤,以查看所有嵌入文件的名称:
- 在 Web 浏览器的地址框中,将以下文本附加到 HTML 的 URL 中:
?debugClientLibs=true
- 当页面加载后,查看页面源。
- 单击作为 href 链接元素提供的链接,以打开相关文件并查看源代码。
少数 Clientlib 无法简化:
- 检查 AEM HTML 库管理器是否启用了简化选项。
- 如果仍然存在问题,请设置调试记录器以检查有无语法错误。请执行下列步骤:
- 转到 http://<主机>:<端口>/system/console/slinglog
- 单击“添加新记录器”
- 将“日志级别”设置为“DEBUG”
- 将“日志文件名称”更改为“clientlibs.log”
- 在“记录器”字段中添加以下类:
com.adobe.granite.ui.clientlibs - 单击“保存”。
- 如果看到类似于下面的错误,则意味着 Clientlib 文件中存在一些语法错误。
27.06.2019 11:36:01.450 *ERROR* [0:0:0:0:0:0:0:1 [1561649761160] POST /libs/granite/ui/content/dumplibs.rebuild.html HTTP/1.1] com.adobe.granite.ui.clientlibs.processor.gcc.impl.YUIScriptProcessor Processed /apps/acs-commons/components/dam/custom-component-activator/clientlib/activator.js. 1 error(s), 0 warning(s) 27.06.2019 11:36:01.450 *DEBUG* [0:0:0:0:0:0:0:1 [1561649761160] POST /libs/granite/ui/content/dumplibs.rebuild.html HTTP/1.1] com.adobe.granite.ui.clientlibs.impl.HtmlLibraryBuilderImpl processing /apps/acs-commons/components/dam/custom-component-activator/clientlib with processor yui for mode min rejected.
- 另外,您也可以尝试将脚本处理器从 YUI 更改为 GCC,因为可能存在着一些新的 js 文件,而这些文件只能由较新的处理器来处理。
RTE 问题
应当始终先安装最新的 SP/CFP,然后再测试 RTE 功能。
RTE 删除属性:
- 如果在执行保存后,有些属性从 RTE 中删除,则可能是因为引入了用于防止跨站点脚本攻击的 XSS 安全框架所致。
- 您会在日志文件中看到类似于以下内容的消息:
25.02.2019 18:29:31.815 *INFO* [10.98.144.110 [1551119371795] GET /content/support/en_US/security.html HTTP/1.1] org.apache.sling.xss.impl.HtmlToHtmlContentContext AntiSamy warning: The a tag contained an attribute that we could not process. The rel attribute had a value of "noopener noreferrer". This value could not be accepted for security reasons. We have chosen to remove this attribute from the tag and leave everything else in place so that we could process the input.
- 对于这种情况,您可以覆盖“/libs/cq/xssprotection/config.xml”并根据业务需要更新安全规则,但是这会造成 AEM 实例暴露于跨站点脚本攻击中,因此 Adobe 不建议采取这种方法