我有一个Grails应用程序使用它自己的tomcat在本地运行,我刚刚将favicon改成了一个新的。问题是我在任何浏览器中都看不到它。旧的收藏夹出现了,或者我根本没有收藏夹,但没有我的新收藏夹。我不认为这本身是圣杯的问题,更多的是收藏夹的问题。

favicon会发生什么?他们应该如何工作?我的浏览器中有许多书签,它们的图标错误,而且似乎永远不会被刷新。如何强制服务器/浏览器停止缓存它们?考虑到它们通常只有16x16,总是缓存它们似乎很愚蠢。为什么不在每次访问页面时都上传它们呢?这并不是一个巨大的开销。


当前回答

如果您只是想调试它以确保它已更改,那么只需在/etc/hosts文件中添加一个虚拟条目并点击新的URL即可。这个收藏夹不会被缓存,你可以确保你的新收藏夹正常工作。

除了更改收藏夹图标的名称之外,您无法强制用户获取新副本

其他回答

如果您使用PHP,也可以使用favicon的MD5哈希作为查询字符串:

<link rel="shortcut icon" href="favicon.ico?v=<?php echo md5_file('favicon.ico') ?>" />

这样,Favicon在更改后将始终刷新。

正如评论中所指出的,您还可以使用上次修改的日期而不是MD5哈希来实现相同的目的,并在服务器性能上节省一点时间:

<link rel="shortcut icon" href="favicon.ico?v=<?php echo filemtime('favicon.ico') ?>" />

在文件路径末尾使用查询字符串。每个生成的查询字符串变量值必须不同。

如果以前的版本是:

<link rel=“icon”href=“http://example.com/favicon.ico?v=v1" />

OR

<link rel=“icon”href=“http://example.com/favicon.ico?v=stringA" />

那么下一个构建应该是:

<link rel=“icon”href=“http://example.com/favicon.ico?v=v2" />

OR

<link rel=“icon”href=“http://example.com/favicon.ico?v=stringB" />

西蒙,我想其他答案到目前为止都没有被接受是有原因的。因此,我认为这可能是一个Grails问题,尤其是如果您使用的是“资源插件”。

如果你的插件提供了一个favicon(这是不合逻辑的,很多插件都提供了),那么它们可能会覆盖你想要使用的图标,因为你的插件本身就是这样的。

如果从所有插件中删除favicon临时解决了问题,那么您很可能会遇到这种情况:

http://jira.grails.org/browse/GPRESOURCES-134

如果尽管应用了上述步骤,问题仍然存在:

尝试重新启动IIS服务器。

如果您只是想调试它以确保它已更改,那么只需在/etc/hosts文件中添加一个虚拟条目并点击新的URL即可。这个收藏夹不会被缓存,你可以确保你的新收藏夹正常工作。

除了更改收藏夹图标的名称之外,您无法强制用户获取新副本