是否根据AEM中的浏览器有条件地包括不同的ClientLib?

是否根据AEM中的浏览器有条件地包括不同的ClientLib?,aem,sightly,Aem,Sightly,是否可以根据浏览器的用户代理有条件地包括不同的ClientLib IE <sly data-sly-use.clientLib="/libs/granite/sightly/templates/clientlib.html" data-sly-call="${clientlib.js @ categories='a'}"/> Modern Browsers <sly data-sly-use.clientLib="/libs/granite/sightly/temp

是否可以根据浏览器的用户代理有条件地包括不同的ClientLib

IE
<sly data-sly-use.clientLib="/libs/granite/sightly/templates/clientlib.html"
     data-sly-call="${clientlib.js @ categories='a'}"/>

Modern Browsers
<sly data-sly-use.clientLib="/libs/granite/sightly/templates/clientlib.html"
     data-sly-call="${clientlib.js @ categories='b'}"/>
IE
现代浏览器
AEM版本:6.3

如果没有,还有什么其他方法可以达到同样的效果


注意:我试图在sling rewriter服务器端完成此检查,但问题是,当dispatcher打开时,它只会再次命中AEM并缓存html,任何后续命中都不会调用任何服务器端逻辑来呈现它。因此,必须在客户端IMO中完成此操作。为此,您必须编写自定义clientlibs模板,如下所述:


然后在WCMUse类中,您可以检查用户代理并相应地包括clientlib

为此,您必须编写自定义clientlibs模板,如下所述:

然后在WCMUse类中,您可以检查用户代理并相应地包括clientlib

您可以:

  • 使用条件注释包装您的ClientLib:
  • 创建一个Use对象,该对象检查
    用户代理
    头并公开一个方法
    isIE
    ,您可以使用该方法有条件地将clientlibs包含在
    数据测试中。或者,您的Use对象可以基于用户代理返回适当的categiers,这样您就只能有一个clientlib调用
您可以:

  • 使用条件注释包装您的ClientLib:
  • 创建一个Use对象,该对象检查
    用户代理
    头并公开一个方法
    isIE
    ,您可以使用该方法有条件地将clientlibs包含在
    数据测试中。或者,您的Use对象可以基于用户代理返回适当的categiers,这样您就只能有一个clientlib调用
    • 您可以使用
      来实现这一点。第一个被旧浏览器忽略,第二个被现代浏览器忽略。类似于Vue的
      现代模式
      。检查:

      更可能需要一些后端来创建自定义clientlib模板。

      您可以使用
      来实现这一点。第一个被旧浏览器忽略,第二个被现代浏览器忽略。类似于Vue的
      现代模式
      。检查:


      您更可能需要一些后端来创建自定义clientlib模板。

      首先,正如您已经正确指出的,您需要一个与dispatcher缓存一起工作的解决方案。显然,这不是一种选择

      然后,考虑到这样一个事实,大多数AEM模板都有段落系统,一方面有多个可能的组件要添加到一个页面中,而且AEM clientlib是在模板级别上构建的(而不是在页面级别上),你最终得到的clientlib在大多数情况下都包含大量未使用的JS和CSS,因为您必须涵盖页面和段落系统中使用的组件的所有可能选项。 考虑到这一点,clientlibs毕竟可能不是一个好的选择


      在AEM repo中使用静态CSS和JS文件,并基于JS代码段在客户端引用它们,就可以做到这一点,而且在大多数情况下,这种方法不会产生任何副作用

      首先,正如您已经正确指出的,您需要一个与dispatcher缓存一起工作的解决方案。显然,这不是一种选择

      然后,考虑到这样一个事实,大多数AEM模板都有段落系统,一方面有多个可能的组件要添加到一个页面中,而且AEM clientlib是在模板级别上构建的(而不是在页面级别上),你最终得到的clientlib在大多数情况下都包含大量未使用的JS和CSS,因为您必须涵盖页面和段落系统中使用的组件的所有可能选项。 考虑到这一点,clientlibs毕竟可能不是一个好的选择


      在AEM repo中使用静态CSS和JS文件,并基于JS代码段在客户端引用它们,就可以做到这一点,而且在大多数情况下,这种方法不会产生任何副作用

      使用WCMUse/SlingModel将是服务器端的,并且不会在dispatcher缓存它之后每次都调用它。请注意,服务器端模板语言是稍微有点不同的。JS/CSS应该由dispatcher缓存,因为它不是动态的,为什么您甚至认为不由dispatcher缓存?!我想你误解了我的问题!我从没说过我们要绕过调度缓存。sling重写器或我们使用的任何sightly/wcmuse代码只有在第一次命中发布服务器时才会被调用,任何后续请求都将通过dispatcher缓存提供服务。它不会调用我们编写的服务器端区分逻辑,因此解决方案必须基于客户端。使用WCMUse/SlingModel将是服务器端的,并且不会在dispatcher缓存它之后每次都调用它。请注意,服务器端模板语言略有不同。JS/CSS应该由dispatcher缓存,因为它不是动态的,你为什么想不让调度员缓存?!我想你误解了我的问题!我从没说过我们要绕过调度缓存。sling重写器或我们使用的任何sightly/wcmuse代码只有在第一次命中发布服务器时才会被调用,任何后续请求都将通过dispatcher缓存提供服务。它不会调用我们编写的服务器端区分逻辑,因此解决方案必须基于客户端。我们尝试过这样做,模块和非模块方法,但在IE 11中不起作用。IE 11加载这两个脚本,而不考虑我们尝试过的标记,模块和无模块方法,但它在IE 11中不起作用。IE 11加载两个脚本,而不考虑标记