CSS 文件中的 URL 被 Grails 资源插件 1.2.7 破坏

Posted

技术标签:

【中文标题】CSS 文件中的 URL 被 Grails 资源插件 1.2.7 破坏【英文标题】:URLs within CSS files broken with Grails resources plugin 1.2.7 【发布时间】:2014-05-02 15:31:26 【问题描述】:

最近将一个 grails 项目升级到 2.3.7,并将插件升级到最新版本,这将 Resources 插件带到了 1.2.7。这适用于 Grails 2.1.2 和资源插件 1.2RC3,但现在不是:

每当我有一个 css 文件通过这样的 URL 引用某些东西时

.checkbox-input-wrap.checked 
  background-image: url(/img/uniform-assets/checkbox.png);

在网页上它会导致此错误(它在 URL 的前面留下“资源:/”)

获取资源:/img/uniform-assets/checkbox.png net::ERR_UNKNOWN_URL_SCHEME

【问题讨论】:

无法复制问题。能够使用资源 1.2.7 访问任何资源。你能添加更多信息来调试吗? 我在使用 grails 2.3.6 和资源插件 1.2.7 时遇到了同样的问题,并且无法解决该问题。插件版本 1.2.1 可以正常工作,所以我暂时恢复了。 @ascu 降级也对我有用。打算再四处逛逛。 我在 2.3.7 和 1.2.7 版本的插件上有一个非常相似的问题。字体未加载——获取资源:/fonts/open-sans/Bold/OpenSans-Bold.svg net::ERR_UNKNOWN_URL_SCHEME 【参考方案1】:

根据我之前的评论,这对我来说不是问题,因为默认情况下,/images/css/js 下的所有资源都作为 Grails 中的临时资源提供,我正在使用 .png 进行测试来自images的文件。

我的同事再次遇到了这个问题,这让我三思而后行。 :) 就他而言,他试图从应用程序中使用的插件提供的/fonts 访问字体。

在尝试以下答案之前,我尝试通过添加以下配置来禁用 css 重写:

//Not required
//grails.resources.rewrite.css = false

但这对我来说毫无意义,因为我正在处理 font 资源。

最终,将其作为Config.groovy 的一部分添加到fonts 就成功了。对于您的情况,您需要执行以下操作:

grails.resources.adhoc.includes = ['/img/**']
//If resource served from a plugin
//grails.resources.adhoc.includes = ['/plugins/**', '/img/**']

如果你已经有了这个配置,它看起来像:

grails.resources.adhoc.includes = [
    '/images/**', '/css/**', '/js/**', '/img/**'
]

但正如我所说,您可能不需要为 grails 应用程序中的现有资源添加临时包含。

继续

grails clean(为了安全起见) grails run-app。 清理浏览器缓存(如果使用 Chrome,我更喜欢 Chrome 中的隐身模式) 点击应用网址

它不应该再抱怨资源了。

【讨论】:

我也注意到 /fonts 文件的问题。我以为我已尝试更新我的临时包含,但鉴于您的成功,我会再试一次。 希望你这次能成功。您可能已经添加为adhoc.patterns 而不是adhoc.includes,因为我也有一段时间感到困惑。 :) @Pete 有效!请注意,我们还使用了缓存资源和压缩资源,一切看起来都很好。它最初对我不起作用,因为我的浏览器正在缓存某些内容,并且我需要在添加适当的临时包含后进行 shift+refresh(通常不需要使用缓存资源)。

以上是关于CSS 文件中的 URL 被 Grails 资源插件 1.2.7 破坏的主要内容,如果未能解决你的问题,请参考以下文章

使用 grails 2.2.0 和资源插件找不到自定义 jquery css 图像

在Spring MVC中管理HTML资源(CSS,JS文件)

Grails 资源插件入门

UrlMappings 将 URL 指向 Grails 中的资产管道文件

从 grails 应用程序中的自定义 groovy 文件加载 spring bean

Grails 2.3 将 css font-face url 更改为“resource:/...”