我正在尝试使用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
答案 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 Prefix
或Special Link Pattern
,以防止将此模式标识为链接并进行重写。
所以只需添加你自定义的linkchecker配置unter / apps / ..(libs下相应配置的覆盖)和上面提到的更改,你应该没问题。