题 如何强制使用favicon刷新


我有一个使用自己的tomcat在本地运行的Grails应用程序,我刚刚更改了一个新的favicon。问题是我无法在任何浏览器中看到它。旧的favicon出现了,或者我根本没有获得图标,但不是我的新图标。我不认为这本身就是Grails问题,更多的问题是赞成。

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


1364
2018-02-05 17:09


起源


被接受且高度赞成的解决方案并非真正的解决方案。刷新无效的实际原因可以在这个问题的解决方案中找到: stackoverflow.com/questions/8616016/... ---图标缓存位于sqlite DB文件中,独立于浏览器缓存! - Mörre
被接受且备受推崇的解决方案是生产解决方案,或者,当我们更新favicon用于生产时,我是否应该为用户编写如何清除其favicon缓存的教程? - Miroslav Saracevic
不是一般解决方案。如果您在不触及代码的情况下使用favicon默认位置,该怎么办?这是一个 favicon.ico 文件根目录中的文件。 - Sebastian


答案:


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

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

1892
2017-08-19 03:39



这对我有用。我不得不删除 type="image/x-icon" 从我的代码,与许多来源相反。我使用了一个文件修改时间戳 v?=2 部分查询。 - Wertisdk
我发现在某些浏览器中,除非我删除历史记录,否则图标不会发生任何问题。然后它将保存新的图标。 - pathfinder
不幸的是,您需要IE7(&IE8?)的完全限定绝对URL - 请参阅 jeffcode.blogspot.com.au/2007/12/... - eug
同意上述评论,但这适用于所有当前浏览器:<link rel =“快捷图标”href =“/ favicon.ico?v = 2”/> - Dave Sumter
缓存favicons是有意义的,因为它们有时会推送2-3千字节。您不希望继续传输所有数据。 (是的,讽刺) - Flat Cat


好吧,经过10分钟的wtf'ing,解决它的简单方法接近于lineofbirds

  1. 输入www.yoursite.com/favicon.ico(或www.yoursite.com/apple-touch-icon.png等)
  2. 输入
  3. CTRL+F5
  4. 重启浏览器(IE,Firefox)

783
2018-03-08 23:45



对于记录,这不是从缓存中清除图标的安全方法,并且在大多数情况下不起作用。这是因为图标缓存在places.sql中(如果我没有记错),而不是在默认缓存中,这是在此答案中清除的缓存。马库斯的回答是最好的方式,努力最少。 - e-motiv
在Chrome 36中不起作用。 - NimChimpsky
使用此方法您可能会克服缓存,但现有用户不能。因此,我发现另一个答案更有价值。 - Demircan Celebi
值得注意的是,这在Firefox 33中不起作用。第一个答案是更好的选择。 - Brent Waggoner
“重启浏览器”部分是唯一真正让它适用于我的东西。所有其他修复在理论上都有效,但实际上并未更改浏览器选项卡上显示的favicon像素。 +1这个答案 - b264


这个答案还没有给出,所以我想我会发布它。我环顾网络,并没有找到一个在本地开发中测试favicons的好答案。

在当前版本的chrome(在OSX上),如果您执行以下操作,您将立即获得favicon刷新:

  1. 将鼠标悬停在标签上
  2. 右键点击
  3. 选择重新加载
  4. 您的favicon现在应该刷新

这是我发现在本地更新favicon的最简单方法。


215
2017-09-23 19:14



不幸的是,这在IE中甚至在Windows上的Chrome中都不起作用,因此除非您只在OSX上使用Chrome,否则您应该使用接受的答案。 - Christopher King
也不适用于我 - 操作系统X上的Chrome - CtheGood
这是唯一对我有用的东西!本地主机上的Chrome - Richard87
丁丁丁,这是最简单,最好的答案!我的天啊!新技巧得到了感谢。我想这不是一个技巧,如果它是一个主菜单项。我想当我们想到如何在标签中刷新一些内容时,我们认为最后一件事就是哦,让我们右键点击它,看看有哪些选项出现.... - Eric Bishard
可悲的是,我只能给一个upvote ...惊人的把戏! :拍: - Celso Fernandes


重命名favicon文件并添加带有新名称的html标头,例如:

<link rel="SHORTCUT ICON" href="http://www.yoursite.com/favicon2.ico" />

52
2018-02-05 17:14



这是做什么的? - Simon
我认为浏览器可以看到favicon名称是否相同。如果是,它将不再请求下载并将使用已经缓存的,但如果您更改名称,它将假定它已更改,从而从服务器请求它。 - Bojan Kogoj
我遇到了IE8的问题。它没有使用放置在子文件夹中的favicon.ico。添加rel-attribute“快捷方式”修复它。 - tienbuiDE
这根本不令人耳目一新,它完全改变了它。 - Zac
请注意,您还必须重命名实际的favicon.ico(它将在您的构建文件夹或提供Web应用程序的目录中) - Rahil Ahmad


如果您使用PHP,您还可以使用favicon的MD5-Hash作为查询字符串:

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

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

正如评论中指出的那样,您还可以使用上次修改日期而不是MD5-Hash来实现相同的功能并节省服务器性能:

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

51
2018-06-11 14:54



很好,这避免了每次我更新图标时都需要更改href,这个答案应该有更多的选票! - Sven van den Boogaart
这个答案的问题是你在每个请求上计算这个哈希值,这是不必要的,可能会损害网站性能(如果有很多用户)。 - Diego Jancic
从两个意义上来说,这并不是什么大不了的事情......一个图标只有几千字节...我的意思是,服务器上的压力不会比每次服务器图标都要小...... - Philippe Gilbert
我仍然没有看到任何计算MD5的真正原因。使用文件的上次修改日期更容易,也更有效。我认为在最后修改的邮票上使用MD5没有任何优势。 - NickG
你多久更新一次你的图标?这似乎有点矫枉过正。只需在创建新图标时使用手动查询字符串即可。 - zeros-and-ones


如果在Windows上并使用chrome,请从任务栏退出(Ctrl + Alt + Delete)并终止所有实例,然后转到...

C:\Users\your_username\AppData\Local\Google\Chrome\User Data\Default

要么...

%appData%/../Local/Google/Chrome/User Data/Default

并删除文件 Favicons-journal, Favicons

然后开始镀铬


由于此解决方案涉及重新启动浏览器,一旦成功,您可能无法返回此处。所以请考虑立即投票。相信我会工作, 加上你总是可以删除你的投票


38
2017-09-28 12:53



这样做了。对我来说,这是谷歌Chrome应用程序的图标问题。不是DOM favicon问题。 - blackhawk
这是一个很好的答案,满足我的测试需求。这个问题没有一个真正的答案,因为它取决于谁需要更新它以及他们愿意和能够合理地做什么。 - Dovev Hefetz
只是一点点改进:任何用户名都是相同的路径 %appData%/../Local/Google/Chrome/User Data/Default - josemmo
Chrome中更简单的解决方案是右键单击并选择Inspect(或CTRL + SHIFT + I),然后单击并按住刷新按钮。将出现一个菜单,其中包含“刷新”,“硬重新加载”或“清空缓存”和“硬重新加载”选项。通常Hard Reload会这样做,但如果由于某种原因它很顽固,那么Empty Cache和Hard Reload肯定会。 - felwithe


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

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

27
2017-10-25 11:33



这个解决方案对我有用。出于某种原因,使用上述方法获得更多票数并没有令人耳目一新。谢谢你,Maxim Mazin。我只想摆脱一个我知道在我的新主机上不再存在的旧图标。 - tsaulic
这种方法在Windows上也适用于我,我从我的应用程序中删除了favicon,但Chrome仍然显示它。关闭Chrome,删除“C:\ Users \ {user} \ AppData \ Local \ Google \ Chrome \ User Data \ Default \ Favicons”,然后重新启动Chome。旧的不受欢迎的图标消失了。 - skomisa
我在“默认”下没有任何东西,但最终我发现了这种变化: ${user.home}/Library/Application Support/Google/Chrome/Profile 1/Favicons - mdahlman
@mdahlman在尝试了所有其他方法之后,这对我来说并不适用。但是我得到了这个后工作 cmd+q进入chrome,进入菜单栏,再次强制退出chrome并等待2分钟打开浏览器并导航回我的站点。 - PrimeTimeTran


好吧,开销是开销,但是,不是太大。

此外,浏览器有时对缓存文件“贪婪”。您可以清除缓存和/或重新启动浏览器,并可能会看到更改。如果那失败了......

我的廉价解决方案是:

  1. 访问您的文件 http://example.com/favicon.ico 在您的浏览器中。
  2. 从您的webroot中删除favicon.ico。
  3. 访问 http://example.com/favicon.ico 再次在浏览器中,验证它丢失了。
  4. 将新的一个上传到您的webroot。
  5. 访问 http://example.com/favicon.ico 再次在浏览器中,验证它是新的。

如果该序列不起作用,则会发生其他事情。


15
2018-02-05 17:15



这对我有用,但遗憾的是我们不能要求每个访客都这样做。 - talentedmrjones
这对linux上的firefox 34无效 - rubo77
访问 example.com/favicon.ico 并按Ctrl + F5 / Ctrl + Shift + R几次为我工作:)谢谢你的想法! - Alfonso Nishikawa


根据浏览器的不同,它们的处理方式不同,但通常我会发现它会转到网站的默认页面并进行硬刷新。 CTRL + F5,通常会让它更新。


11
2018-02-05 17:12



这对linux上的firefox 34无效 - rubo77


对于Internet Explorer,还有另一种解决方案:

  1. 打开Internet Explorer。
  2. 单击菜单>工具> Internet选项。
  3. 单击常规>临时Internet文件>“设置”按钮。
  4. 单击“查看文件”按钮。
  5. 找到旧的favicon.ico文件并将其删除。
  6. 重新启动浏览器(Internet Explorer)。

8
2017-11-25 01:10