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

时间:2012-12-18 13:02:24

标签: css base64 cq5 data-uri

我正在尝试使用data-uri-scheme将自定义字体包含到css中。 CQ5(我使用的是5.5版)是将clientlib目录中的路径添加到带有data-uri-scheme字体数据的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中的错误还是可以添加/执行某些操作阻止添加“desktop / css”

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

[UPDATE]

css文件包含在html base.jsp部分的<head>中。

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

base.jsp的位置:

/apps/myproject/pages/base/base.jsp

css.txt的位置:

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

4 个答案:

答案 0 :(得分:3)

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

我建议您使用Adobe打开日托票,以更新此方法以支持数据uri-scheme。

答案 1 :(得分:2)

围绕CQ5(通常是有用的)链接重写的两种策略重写:

(1)将@ font-face代码放在CQ5为您组装的外部.css文件中。您可能会发现必须明确编码&lt; link&gt;而不是使用<cq:includeClientLib>标记将其包含在HTML中。标签,例如:

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

(2)使用document.write()调用注入@ font-face代码:

<script type="text/javascript">
    document.write("@font-face { font-family: 'CustomFont'; src: url(data:application/x-font-woff;
    ...}");
</script>

答案 2 :(得分:2)

这是一个错误,将用5.6修复。直接包含单个css文件(如上所述)可以避免clientlib重写,否则我不知道clientlib中的解决方法。

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

答案 3 :(得分:0)

如果没有检查导致错误重写的原因,我认为它是Day CQ Link Checker Service

您可能希望添加Special Link PrefixSpecial Link Pattern,以防止将此模式标识为链接并进行重写。

所以只需添加你自定义的linkchecker配置unter / apps / ..(libs下相应配置的覆盖)和上面提到的更改,你应该没问题。