2017-07-28 49 views
1

我正在使用AEM 6.1 SP2,我试图在定位标记的href中启用'tel'属性以使点击调用功能性工作。我已经添加了'htmlRules'节点 ,并将htmlRules节点下的节点与'protocols'属性链接为[http://,https://,ftp://,tel :, mailto :, file://]'tel'属性在AEM 6.1的经典UI中富文本编辑器中的锚标记的href中不起作用

在链接中指定 - http://labs.6dglobal.com/blog/2013-01-11/configuring-telephone-tags-within-rich-text-components-and-link-checker/

的“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> 

回答

1

这是固定的覆盖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是已经在博客上

https://experience-aem.blogspot.com.au/2015/05/aem-6-sp2-handling-custom-protocol-in-link-href-in-rte.html

虽然已经在博客和其他地方

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方式

+0

AEM的AntiSamy配置位于'/ libs/cq/xssprotection/config.xml';它实际上会更好如果你要将该文件复制到'/ apps'并在叠加文件中添加正则表达式 –

+0

我已经覆盖了该文件,我编辑了答案以反映相同 – cqsapientuser

0

看来您在问题中链接的解决方案并不适用适用于最新版本的AEM。

现在负责从tel开始删除href的机制是HTL XSS保护,它在写入之前扫描属性。避免这种情况的最简单方法是在Rich Text组件中禁用它:${properties.text @ context='unsafe'}。这是不是最安全的解决方案,但并取而代之的则是更好地与这些步骤扩展XSS保护配置:从库将其复制到应用

  1. 覆盖XSS配置文件:

/libs/cq/xssprotection/config.xml - >/apps/cq/xssprotection/config.xml /libs/sling/xss/config.xml - >/apps/sling/xss/config.xml

  • 用新的正则表达式添加协议电话:
  • <regexp name="telURL" value="tel:[0-9]+"/>

  • 添加telURL到锚href属性的regexp-list
  • <regexp name="telURL"/>

  • 这可能是也执行这些更改后需要重新启动AEM实例。
  • 在问题的情况下,您可以在this blog page和这Stackoverflow post阅读更多关于它。

    此外,链接检查器机制可能仍然会在编辑模式下将您的链接标记为无效,并且在发布时可以将其删除。

    根据,如果你需要它,使其工作,以一个或所有特定锚或应用中的所有锚,您可以:

    • 添加x-cq-linkchecker="skip"属性来你的锚,如i.net的建议根据您的文章
    • 发表评论,或者如果你想允许添加tel到页面上的任何可能的锚,在日CQ链接检查服务 OSGI服务添加例外tel:特殊链接前缀。请注意,那么服务配置需要应用于所有作者和发布实例。
    +0

    感谢您的回复,我已经在linkchecker配置中添加了'tel'属性。我还在锚标记中添加了x-cq-linkchecker =“skip”,但是在提交对话框后它也被剥离了标记。您能否让我知道由于哪个tel属性没有被持久化而可能出现问题? – cqsapientuser

    +1

    啊,我在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,请告知我是否有帮助。 –

    +0

    是的,那是确切地说,对,我花了很长时间试图在rte.js中找出它,以后才发现它是xssprotection – cqsapientuser

    0

    我们按照您已共享的引用链接完成了相同的操作,但我们正在传递对话框中的“href”值。 ex href =“tel:$ {properties.propertyname}”。 或者你可以尝试像href =“$ {properties.propertyname}”,并从对话框“tel:123456789”传递值。 不知道这是否会帮助你。 谢谢。