如何强制CQ5.5忽略CSS数据uri方案?

如何强制CQ5.5忽略CSS数据uri方案?,css,base64,aem,data-uri,Css,Base64,Aem,Data Uri,我正在尝试使用数据uri方案将自定义字体包含到css中。CQ5(我使用的是5.5版)正在将clientlib目录中的路径添加到包含数据uri方案字体数据的css文件所在的位置 因此,与其忽略css属性,不如: @font-face { font-family: 'CustomFont'; src: url(data:application/x-font-woff;... ... } CQ5执行以下操作: @font-face { font-family: 'CustomFont

我正在尝试使用数据uri方案将自定义字体包含到css中。CQ5(我使用的是5.5版)正在将clientlib目录中的路径添加到包含数据uri方案字体数据的css文件所在的位置

因此,与其忽略css属性,不如:

@font-face {
  font-family: 'CustomFont';
  src: url(data:application/x-font-woff;...
  ...
}
CQ5执行以下操作:

@font-face {
  font-family: 'CustomFont';
  src: url(desktop/css/data:application/x-font-woff;...
  ...
}
这是CQ5.5中的一个bug,还是我可以添加/执行一些操作来阻止添加“桌面/css”

结果是,我得到404HTTP状态,因为字体是“找不到”

[更新]

css文件包含在html
部分的
base.jsp

<link rel="stylesheet" 
    href="/etc/designs/myproject/clientlib/desktop.css" type="text/css"/ >
css.txt的位置

/etc/designs/myproject/clientlib/desktop/css.txt

解决CQ5(通常有用)链接重写的两种策略:

(1) 将@font-face代码放在CQ5为您组装的外部.css文件中。您可能会发现必须显式地对标记进行编码,而不是使用标记将其包含在HTML中,例如:

<link rel="stylesheet" href="<%= currentDesign.getPath() %>/clientlibs/themes/default.css" type="text/css" media="screen" />

(2) 将@font-face代码与文档一起注入。write()调用:


写(“@font-face{font-family:'CustomFont';src:url(数据:application/x-font-woff;
...}");

看起来像个bug。CSS通过一个方法传递,该方法专门查找连接在一起的CSS文件中的url(“{}”),以创建组合CSS文件-CssFileBuilder#resolveUrl(String[],String[],String)。此方法似乎没有考虑数据方案,相反,如果URL的长度为0、以斜杠(/)开头或与模式“^[a-Za-z][a-Za-z0-9+\-.]:/”(有效的外部链接)匹配,它只会跳过修改URL。我的假设是,它这样做是为了修改相对URL(“{}”)值,但它们没有考虑数据方案


我建议在Adobe中打开日托票据,更新此方法以支持数据uri方案。

在未检查导致错误重写的原因之前,我假设是
Day CQ链接检查服务

您可能需要添加
特殊链接前缀
特殊链接模式
,以防止此模式被标识为链接并被重写


因此,只需将您的自定义linkchecker配置添加到unter/apps/(在libs下覆盖相应的配置)和上述更改,您就可以了。

这是一个bug,将在5.6中修复。直接包括单个css文件(如前所述)避免clientlib重写,否则我不知道clientlib内部有什么解决方法


原因是clientlib正在重写相对路径,因为基础从单个css文件更改为连接的clientlib css。“数据:”URI在这里没有得到正确考虑。

Hi David,谢谢你的建议。我知道这两种解决方案。我可能会选择第一种或使用内联css()包括字体。我正在一个流量很大的网站上工作,每个http请求都很重要,我希望找到一个解决方案,让我使用data-uri-scheme。你介意添加更多细节,说明你是如何在你的页面中包含这个css的吗?例如,这个css文件是由clientlib包含的吗?如果是,相关内容是什么css文件的内容以及将clientlibs包含到HTML中的代码片段(例如currentDesign.WriteCSIncludes(pageContext);)这是cq:Page HTML JSP中的内联内容吗?您是在页面或组件JSP中输出上述内容吗?我这样问是为了重复这个问题,看看是否是链接检查器或HtmlLibraryManager为您重写URL的问题。@JasonDay我已更新了我的问题以回答您的问题。如果有任何问题,请告诉我还有,我不知道。谢谢。嗨,杰森,谢谢你的详细分析。我想这可能是一个bug。如果你不介意我问你是在Adobe工作还是为使用Day的客户工作?一点也不,我为一家公司工作,该公司在我们的一些网站上使用CQ5。我对这个答案给予了奖励,因为我认为情况就是这样打开托儿所票据是我下一步要做的。不,这与链接检查器无关。clientlib正在重写相对路径,因为基础从单个css文件更改为连接的clientlib css。我同意这个答案,因为它也是。谢谢。
<link rel="stylesheet" href="<%= currentDesign.getPath() %>/clientlibs/themes/default.css" type="text/css" media="screen" />
<script type="text/javascript">
    document.write("@font-face { font-family: 'CustomFont'; src: url(data:application/x-font-woff;
    ...}");
</script>