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

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


当前回答

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

如果以前的版本是:

<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" />

其他回答

尝试在新选项卡中打开

我尝试了上面的许多方法(重置缓存、刷新、使用链接标记等),甚至检查了.htaccess文件并重置了ExpiresByType变量。

但这就是我在Chrome(25.0.x)和Safari(6.0.1)中的最终效果:

正在刷新缓存将收藏夹图标与<link>标签硬链接导航至mysite.com/favicon.ico在新选项卡中打开mysite.com

(直到第3步,在同一选项卡中刷新会继续再现旧图标。)

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

尝试重新启动IIS服务器。

Chrome版本:68.0.3440.106

只需重新启动Chrome(在地址栏中):chrome://restart

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。

它可能对少数人有用,但我也遇到了同样的问题,并发现它与文件渗透有关,所以我给了它777权限,它起了作用,当然,在您确定问题存在后,请确保将权限改回更安全的值。