AEM-如何仅在发布模式下运行JavaScript代码?

时间:2019-07-18 11:31:24

标签: aem

在AEM中,是否可以仅以发布模式而不是作者模式运行JavaScript文件?

1 个答案:

答案 0 :(得分:1)

有很多方法可以实现

如果这是一个独立的模块,则可以将其放在单独的客户端库中,并仅在有条件的发布中加载客户端库。

<sly data-sly-test="wcmmode.disabled" data-sly-use.clientLib="/libs/granite/sightly/templates/clientlib.html"
     data-sly-call="${clientlib.css @ categories='foo'}"/>

如果这是您希望排除在作者身上的一小段代码,则可以添加一个数据属性,该属性将暗示wcmmode,然后通过基于该数据属性的检查来保护这些功能

<body data-wcm-mode="${wcmmode.toString}">.....</body>
$(document.body).attr('data-wcm-mode') === "DISABLED"){
     //do something
}

作者模式下有很多CQ / Granite命名空间对象,您可以检查它们的存在以推断这是作者还是发布

if(typeof typeof Granite === 'undefined' ||  typeof Granite.author === 'undefined'){
     //do something
}

这些都不实际意味着真正的发布服务器,但是禁用了wcmmode,这对于大多数用例来说就足够了。如果必须绝对检查发布者,而不仅仅是wcmmode,请考虑检查slingsetting是否存在发布运行模式[https://sling.apache.org/documentation/bundles/sling-settings-org-apache-sling-settings.html]