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

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


当前回答

在Mac OS X上的Chrome中,可以使用favicon缓存删除文件

${user.home}/Library/Application Support/Google/Chrome/Default/Favicons 

其他回答

我最近恢复了我的书签,并正在寻找一种方法来恢复FavIcons,而无需访问每个页面。我的搜索使我找到了这个线索。

对于那些处于类似情况的用户,只需下载FAVICON RELOADER插件即可。安装后,您将在BOOKMARKS下拉菜单中找到“重新加载收藏夹图标”命令。

https://addons.mozilla.org/en-US/firefox/addon/faviconreloader/?src=api

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

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

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。

要刷新站点的收藏夹图标,您可以使用文件名上的链接标记和查询字符串强制浏览器下载新版本。这在生产环境中尤其有助于确保用户获得更新。

<link rel="icon" href="http://www.yoursite.com/favicon.ico?v=2" />

如果您使用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') ?>" />