'tel' 属性在 AEM 6.1 中的经典 UI 富文本编辑器中锚标记的 href 中不起作用
'tel' attribute not working in href of anchor tag in rich text editor in classic UI in AEM 6.1
我正在使用 AEM 6.1 SP2,我正在尝试在锚标记的 href 中启用 'tel' 属性以使点击呼叫功能正常工作。我已经添加了 'htmlRules' 节点
和 htmlRules 节点下的 links 节点 'protocols' 属性 作为 [http://, https://, ftp://, tel:, mailto:, file ://]
中指定
rte.js 中的 'validateHref' 函数确实读取 'protocols' 属性 并验证 'tel ' 属性是否有效,但不确定为什么 [=在作者对话框中单击 'ok' 时,30=] 属性不会保留在标记中。
这是锚标签-
<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="[[=13=]]"/>
<post
jcr:primaryType="nt:unstructured"
tagsToRemove="[[=13=]]"/>
<paste
jcr:primaryType="nt:unstructured"
tagsToRemove="[[=13=]]"/>
</cleanup>
</serializer>
<links
jcr:primaryType="nt:unstructured"
protocols="[http://,https://,ftp://,tel:,mailto:,file://]"/>
</htmlRules>
您在问题中 link 的解决方案似乎不适用于最新版本的 AEM。
现在负责删除以tel
开头的href
的机制是在写入之前扫描属性的HTL XSS保护。避免这种情况的最简单方法是在富文本组件中禁用它:${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
- 为电话添加带有新正则表达式的协议:
<regexp name="telURL" value="tel:[0-9]+"/>
- 将
telURL
添加到锚href
属性的regexp-list
:
<regexp name="telURL"/>
- 完成这些更改后,可能还需要重新启动 AEM 实例。
如有问题,您可以在 this blog page and this 上阅读更多相关信息。
此外,Link 检查器机制可能仍会在编辑模式下将您的 link 标记为无效,并且在发布时可以将其删除。
根据您是否需要它来使其适用于一个或所有特定锚点或应用程序中的所有锚点,您可以:
- 将
x-cq-linkchecker="skip"
属性添加到您的锚点,正如 i.net 在您的 post 下的评论中所建议的
- 或者如果您希望允许将
tel
添加到页面上任何可能的锚点,请添加例外 tel:
特殊 Link 前缀在 Day CQ Link Checker Service OSGI 服务中。请注意,服务配置需要应用于所有作者和发布实例。
我们按照您分享的参考 link 做了同样的事情,但我们从对话框中传递了 "href" 值。
例如 href="tel: ${properties.propertyname}"。
或者您可以像 href="${properties.propertyname}" 那样尝试并从对话框 "tel:123456789" 传递值。
不确定这是否对您有帮助。
谢谢。
已修复覆盖位于 -
的 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>
的博客中对此进行了描述
尽管该博客和其他地方都提到了它
https://forums.adobe.com/thread/2329552
配置文件位于 -
/libs/sling/xss/config.xml
而不是
/libs/cq/xssprotection/config.xml
甚至当我使用视觉组件时,
/libs/wcm/foundation/components/text/text.html
即便如此,覆盖 /libs/sling/xss/config.xml 的配置文件也没有任何效果,我不得不覆盖 /libs/cq/xssprotection/config.xml 的文件。我正在使用 aem 6.1 SP2。 AEM的神秘方式
我正在使用 AEM 6.1 SP2,我正在尝试在锚标记的 href 中启用 'tel' 属性以使点击呼叫功能正常工作。我已经添加了 'htmlRules' 节点 和 htmlRules 节点下的 links 节点 'protocols' 属性 作为 [http://, https://, ftp://, tel:, mailto:, file ://]
中指定rte.js 中的 'validateHref' 函数确实读取 'protocols' 属性 并验证 'tel ' 属性是否有效,但不确定为什么 [=在作者对话框中单击 'ok' 时,30=] 属性不会保留在标记中。
这是锚标签-
<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="[[=13=]]"/>
<post
jcr:primaryType="nt:unstructured"
tagsToRemove="[[=13=]]"/>
<paste
jcr:primaryType="nt:unstructured"
tagsToRemove="[[=13=]]"/>
</cleanup>
</serializer>
<links
jcr:primaryType="nt:unstructured"
protocols="[http://,https://,ftp://,tel:,mailto:,file://]"/>
</htmlRules>
您在问题中 link 的解决方案似乎不适用于最新版本的 AEM。
现在负责删除以tel
开头的href
的机制是在写入之前扫描属性的HTL XSS保护。避免这种情况的最简单方法是在富文本组件中禁用它:${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
- 为电话添加带有新正则表达式的协议:
<regexp name="telURL" value="tel:[0-9]+"/>
- 将
telURL
添加到锚href
属性的regexp-list
:
<regexp name="telURL"/>
- 完成这些更改后,可能还需要重新启动 AEM 实例。
如有问题,您可以在 this blog page and this
此外,Link 检查器机制可能仍会在编辑模式下将您的 link 标记为无效,并且在发布时可以将其删除。
根据您是否需要它来使其适用于一个或所有特定锚点或应用程序中的所有锚点,您可以:
- 将
x-cq-linkchecker="skip"
属性添加到您的锚点,正如 i.net 在您的 post 下的评论中所建议的
- 或者如果您希望允许将
tel
添加到页面上任何可能的锚点,请添加例外tel:
特殊 Link 前缀在 Day CQ Link Checker Service OSGI 服务中。请注意,服务配置需要应用于所有作者和发布实例。
我们按照您分享的参考 link 做了同样的事情,但我们从对话框中传递了 "href" 值。 例如 href="tel: ${properties.propertyname}"。 或者您可以像 href="${properties.propertyname}" 那样尝试并从对话框 "tel:123456789" 传递值。 不确定这是否对您有帮助。 谢谢。
已修复覆盖位于 -
的 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>
的博客中对此进行了描述
尽管该博客和其他地方都提到了它
https://forums.adobe.com/thread/2329552
配置文件位于 -
/libs/sling/xss/config.xml
而不是
/libs/cq/xssprotection/config.xml
甚至当我使用视觉组件时,
/libs/wcm/foundation/components/text/text.html
即便如此,覆盖 /libs/sling/xss/config.xml 的配置文件也没有任何效果,我不得不覆盖 /libs/cq/xssprotection/config.xml 的文件。我正在使用 aem 6.1 SP2。 AEM的神秘方式