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

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


当前回答

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

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

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

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

其他回答

通过销毁浏览器用来存储旧收藏夹图标的文件,您可以强制加载新收藏夹图标。

关闭浏览器。确保不再有浏览器进程在运行(例如,检查任务管理器中的chrome.exe或firefox.exe)。导航到浏览器存储用户文件的位置:对于Chrome,请转到Chrome数据目录。对于Firefox,请转到Firefox配置文件文件夹。删除收藏夹缓存。对于Chrome,删除Favicons和Favicons日志对于Firefox,删除favicons.sqlite

这几乎肯定会奏效。如果没有:

可能性1:浏览器的更新改变了收藏夹缓存的工作方式。请使用新说明编辑此答案。可能性2:你最喜欢的问题与过于激进的缓存无关。相反,这可能是一个资源加载问题——使用开发者工具,确保新的收藏夹图标下载正确。

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

尝试重新启动IIS服务器。

此外,请确保将完整图像URL而不仅仅是其相对路径:

http://www.example.com/images/favicon.ico

而不是:

images/favicon.ico

Chrome的收藏夹支持有问题-忽略这个答案

我写下这个答案的印象是,这就是刷新谷歌Chrome中的收藏夹所需要的。然而,事实证明,这只在前五分钟左右有效,直到图标在Chrome的历史同步中无可挽回地丢失。

原答覆

您不必清除缓存、重新启动浏览器或重写HTML,只需更改图标的URL一次,这样浏览器就会忘记以前缓存的图标。

假设您已经通过页面的<head>中的<link>元素定义了图标,那么您可以通过在控制台中运行这个标准的JS单行程序来实现这一点:

[].slice.call(document.querySelectorAll('head>link[rel$="icon"]')).map(function(ln){ln.href+='?v=2'});

有关可以为生产中的最终用户自动执行此操作的更高级实现,请参阅freshicon.js。

根据浏览器的不同,它们的处理方式也有所不同,但通常我会发现会转到站点的默认页面,然后进行硬刷新。CTRL+F5(或在macOS上的¨Command+SHIFT+F5)通常会使其更新。