'tel'属性在AEM 6.1的经典UI中富文本编辑器中的锚标记的href中不起作用
我正在使用AEM 6.1 SP2,我试图在定位标记的href中启用'tel'属性以使点击调用功能性工作。我已经添加了'htmlRules'节点 ,并将htmlRules节点下的节点与'protocols'属性链接为[http://,https://,ftp://,tel :, mailto :, file://]'tel'属性在AEM 6.1的经典UI中富文本编辑器中的锚标记的href中不起作用
的“validateHref”在rte.js功能无法读取“协议”属性,并验证了“电话”属性是有效的,但不知道为什么“电话”属性不在作者对话框中单击“确定”时,坚持标记。
这是锚标记 -
<a style="color: #6c6c6c; text-decoration: underline;" class="tel" href="tel:1234 567 891">1234 567 89</a>
,这是它是如何呈现的页面上标记 -
<a style="color: rgb(108,108,108);text-decoration: underline;" class="tel">1234 567 89</a>
这是 'htmlRules' 节点XML -
<htmlRules jcr:primaryType="nt:unstructured">
<serializer jcr:primaryType="nt:unstructured">
<cleanup jcr:primaryType="nt:unstructured">
<pre
jcr:primaryType="nt:unstructured"
tagsToRemove="[\0]"/>
<post
jcr:primaryType="nt:unstructured"
tagsToRemove="[\0]"/>
<paste
jcr:primaryType="nt:unstructured"
tagsToRemove="[\0]"/>
</cleanup>
</serializer>
<links
jcr:primaryType="nt:unstructured"
protocols="[http://,https://,ftp://,tel:,mailto:,file://]"/>
</htmlRules>
这是固定的覆盖xssprotection配置文件在 -
/libs/cq/xssprotection/config.xml
到
/apps/cq/xssprotection/config.xml
并在正则表列表中添加'tel'属性
<regexp name="telURL" value="tel:[0-9]+"/>
<attribute name="href">
<regexp-list>
<regexp name="onsiteURL"/>
<regexp name="offsiteURL"/>
<regexp name="telURL"/>
</regexp-list>
</attribute>
Th是已经在博客上
虽然已经在博客和其他地方
Rendering telephone links in HTL based on input from a Rich Text widget
https://forums.adobe.com/thread/2329552
,对于悦目的配置文件是被提及被描述目前在 -
/libs/sling/xss/config.xml
,而不是在
/libs/cq/xssprotection/config.xml
,甚至当我使用的是悦目组件,
/库/ WCM /基础/组件/文本/ text.html
即使这样,覆盖/libs/sling/xss/config.xml中的配置文件没有任何效果,我不得不覆盖文件/libs/cq/xssprotection/config.xml。我正在使用aem 6.1 SP2。神秘的AEM方式
AEM的AntiSamy配置位于'/ libs/cq/xssprotection/config.xml';它实际上会更好如果你要将该文件复制到'/ apps'并在叠加文件中添加正则表达式 –
我已经覆盖了该文件,我编辑了答案以反映相同 – cqsapientuser
看来您在问题中链接的解决方案并不适用适用于最新版本的AEM。
现在负责从tel
开始删除href
的机制是HTL XSS保护,它在写入之前扫描属性。避免这种情况的最简单方法是在Rich Text组件中禁用它:${properties.text @ context='unsafe'}
。这是不是最安全的解决方案,但并取而代之的则是更好地与这些步骤扩展XSS保护配置:从库将其复制到应用
- 覆盖XSS配置文件:
/libs/cq/xssprotection/config.xml
- >/apps/cq/xssprotection/config.xml
/libs/sling/xss/config.xml
- >/apps/sling/xss/config.xml
- 用新的正则表达式添加协议电话:
- 添加
telURL
到锚href
属性的regexp-list
: - 这可能是也执行这些更改后需要重新启动AEM实例。
<regexp name="telURL" value="tel:[0-9]+"/>
<regexp name="telURL"/>
在问题的情况下,您可以在this blog page和这* post阅读更多关于它。
此外,链接检查器机制可能仍然会在编辑模式下将您的链接标记为无效,并且在发布时可以将其删除。
根据,如果你需要它,使其工作,以一个或所有特定锚或应用中的所有锚,您可以:
- 添加
x-cq-linkchecker="skip"
属性来你的锚,如i.net的建议根据您的文章 - 发表评论,或者如果你想允许添加
tel
到页面上的任何可能的锚,在日CQ链接检查服务 OSGI服务添加例外tel:
特殊链接前缀。请注意,那么服务配置需要应用于所有作者和发布实例。
感谢您的回复,我已经在linkchecker配置中添加了'tel'属性。我还在锚标记中添加了x-cq-linkchecker =“skip”,但是在提交对话框后它也被剥离了标记。您能否让我知道由于哪个tel属性没有被持久化而可能出现问题? – cqsapientuser
啊,我在i.net编辑它之前完全误解了你的问题,我以为它是Link Checker Service生成的标记! 那么,如果带有_tel_的_href_被删除(它存在于属性CRX DE中,则可能是[XSS保护,请在此处查看更多详细信息](http://experience-aem.blogspot.com/2015/05/) aem-6-sp2-handling-custom-protocol-in-link-href-in-rte.html)。可能你所连接的解决方案不再适用于新的RTE,请告知我是否有帮助。 –
是的,那是确切地说,对,我花了很长时间试图在rte.js中找出它,以后才发现它是xssprotection – cqsapientuser
我们按照您已共享的引用链接完成了相同的操作,但我们正在传递对话框中的“href”值。 ex href =“tel:$ {properties.propertyname}”。 或者你可以尝试像href =“$ {properties.propertyname}”,并从对话框“tel:123456789”传递值。 不知道这是否会帮助你。 谢谢。
你的配置看起来不错。链接检查器可能会丢弃它。你可以尝试在你的''标签中加入'x-cq-linkchecker =“skip”',这样linkchecker就排除了它。如果解决了这个问题,您可以将tel添加到linkchecker中的异常中。 –
感谢您的评论,我已经在linkchecker配置中添加了'tel'属性。我还在锚标记中添加了x-cq-linkchecker =“skip”,但是在提交对话框后它也被剥离了标记。您能否让我知道由于哪个tel属性没有被持久化而可能出现问题? – cqsapientuser