如何在AEM的JavaScript Use-API中获取完整URL以生成有效分享链接
在AEM JavaScript Use-API中获取资源完整URL以生成有效分享链接
我来帮你搞定这个问题——要让你的sms:、mailto:这类分享链接真正生效,核心就是把pathbrowser返回的内部JCR路径(比如/content/pages/example_page)转换成对外可访问的完整URL。下面是具体的实现步骤和代码示例:
核心思路
AEM自带的Externalizer服务专门用来处理内部路径到外部URL的转换,我们可以在JavaScript Use-API中借助它和ResourceResolver来生成所需的完整链接。
具体实现代码
假设你的pathbrowser组件的name属性是selectedResourcePath,对应的Use-API代码可以这么写:
use(function () { // 获取用户通过pathbrowser选择的资源内部路径 var selectedPath = properties.get('selectedResourcePath', ''); var fullPublicUrl = ''; if (selectedPath) { // 获取当前资源的ResourceResolver实例 var resourceResolver = resource.getResourceResolver(); // 适配得到Externalizer服务 var externalizer = resourceResolver.adaptTo(Packages.com.day.cq.commons.Externalizer); // 生成发布环境的完整URL;如果是作者环境测试,改用externalizer.authorLink() fullPublicUrl = externalizer.publishLink(resourceResolver, selectedPath); // 对URL进行编码,避免特殊字符破坏分享链接的格式 fullPublicUrl = encodeURIComponent(fullPublicUrl); } // 返回供HTL使用的分享链接 return { mailtoLink: 'mailto:?body=' + fullPublicUrl, smsLink: 'sms:?body=' + fullPublicUrl }; });
关键细节说明
- 路径匹配:代码里的
selectedResourcePath要和你pathbrowser组件配置的name属性完全一致,不然拿不到用户选择的路径。 - 环境适配:
publishLink对应生产发布环境的URL,如果是在作者环境测试预览,换成authorLink就能生成作者环境可访问的链接。 - URL编码:
encodeURIComponent一定要加,不然如果URL里有&、?这类特殊字符,会导致sms或mailto的参数失效。 - OSGi配置:要确保AEM的
Day CQ Link Externalizer配置正确(在OSGi控制台找这个配置项),设置好发布环境的域名,这样生成的URL才会是你站点的真实公网地址。
后续使用(HTL示例)
在你的组件HTL文件里,直接引用返回的链接即可:
<a href="${shareLinks.mailtoLink}">通过邮件分享</a> <a href="${shareLinks.smsLink}">通过短信分享</a>
内容的提问来源于stack exchange,提问作者dingdingding
相关产品推荐
相关产品推荐

