提问人:Simon 提问时间:2/6/2010 最后编辑:Nic3500Simon 更新时间:11/19/2023 访问量:824166
如何强制刷新网站图标?
How do I force a favicon refresh?
问:
我有一个 Grails 应用程序使用它自己的 tomcat 在本地运行,我刚刚将图标更改为新的图标。问题是我无法在任何浏览器中看到它。旧的图标出现了,或者我根本没有收到图标,但不是我的新图标。我不认为这本身是 Grails 的问题,而是网站图标的问题。
网站图标应该发生什么?它们应该如何工作?我的浏览器中有许多书签,这些书签的图标是错误的,而且它们似乎从未刷新过。如何强制服务器/浏览器停止缓存它们?总是缓存它们似乎很愚蠢,因为它们通常只有 16x16。为什么不在每次访问页面时都上传它们呢?这并不是一个巨大的开销。
答:
很可能是网络浏览器问题。您必须从浏览器中删除缓存,关闭浏览器并重新打开它。这应该可以解决它。
我不相信你的网站图标会在你的收藏夹上得到刷新,直到你重新访问该页面,并假设你之前已经清除了浏览器缓存。
您的网络浏览器不会自行上网检查新的图标......谢天谢地。
评论
根据浏览器的不同,它们的处理方式也不同,但通常我发现转到站点的默认页面并进行硬刷新。 +(或 macOS 上的 + +),通常会让它更新。CTRLF5⌘ CommandSHIFTF5
重命名网站图标文件,并在 HTML head 元素中添加具有新名称的链接,例如:
<link rel="SHORTCUT ICON" href="http://www.yoursite.com/favicon2.ico" />
评论
好吧,开销就是开销,但是的,不是太大。
此外,浏览器有时对缓存文件“贪婪”。您可以清除缓存和/或重新启动浏览器,并且可能会看到更改。但是,如果失败了......
我的便宜解决方案是:
- 在浏览器中 http://example.com/favicon.ico 访问您的文件。
- 从您的网络根中删除 favicon.ico。
- 在浏览器中再次访问 http://example.com/favicon.ico,验证它是否丢失。
- 将新的上传到您的 webroot。
- 在浏览器中再次访问 http://example.com/favicon.ico,验证它是否是新的。
如果这个序列不起作用,那么就会发生其他事情。
评论
当您向 Google 请求网站图标时,您可以查看响应标头。
Last-Modified: Fri, 09 Jan 2009 16:35:02 GMT
Date: Thu, 01 Dec 2010 00:00:01 GMT
Expires: Fri, 01 Dec 2011 00:00:01 GMT
Cache-Control: public, max-age=31536000
Age: 7
如果在响应上放置“Expires:”标头,则客户端浏览器将在该时间戳之后重新请求该图标。在进行主动开发时,您可以将过期时间戳设置为将来的一两秒,并始终让它获取此时间戳,尽管这是一个糟糕的长期计划。
评论
此外,请确保输入完整的图像 URL,而不仅仅是其相对路径:
http://www.example.com/images/favicon.ico
而不是:
images/favicon.ico
评论
/images/favicon.ico
是正确的方法:它“适用于”不同的环境(开发/测试/生产),并且是一个绝对路径 - 来自文档基 URL。
这是我如何使用简单的动画图标和 FireFox 3.6.13(测试版)管理它,它可能也适用于其他版本的 FireFox,如果没有,请告诉我。 它基本上是artlung的解决方案,但也处理了.gif文件:
- 我通过FTP程序打开,下载了我的favicon.ico和favicon.gif文件,
- 然后从我的服务器文件中删除它们。
- 然后我按照artlung的建议在浏览器中打开了它们: http://mysite.com/favicon.ico 和 http://mysite.com/favicon.gif 一旦这些地址加载并显示 404 个错误页面(“找不到页面”)
- 然后我把这两个文件都上传回我的服务器,然后 PRESTO - 正确的图标立即显示出来。
评论
改编自 lineofbird 的答案,您可以执行以下操作:
通过输入地址栏中的网站图标网址,直接转到其地址,例如
www.yoursite.com/favicon.ico
www.yoursite.com/apple-touch-icon.png
- 等。
按 导航到 urlEnter
刷新方式Ctrl+F5
重新启动浏览器(例如Chrome、Firefox)
评论
如果您只是对调试它以确保它已更改感兴趣,则只需在 /etc/hosts 文件中添加一个虚拟条目并点击新 URL。该图标不会被缓存,您可以确保新的图标正在工作。
除了更改网站图标的名称外,您无法强制用户获取新副本
要刷新您网站的网站图标,您可以使用链接标签和文件名上的查询字符串强制浏览器下载新版本。
这在生产环境中特别有用,可以确保用户获得更新。
<link rel="icon" href="http://www.yoursite.com/favicon.ico?v=2" />
评论
type="image/x-icon"
v?=2
我最近恢复了我的书签,并正在寻找一种在不访问每个页面的情况下恢复 FavIcons 的方法。我的搜索将我带到了这个线程。
对于那些处于类似情况的人,只需下载 FAVICON RELOADER 插件。安装后,您将在书签下拉菜单中找到“重新加载收藏夹图标”命令。
https://addons.mozilla.org/en-US/firefox/addon/faviconreloader/?src=api
评论
西蒙,我想到目前为止没有其他答案被接受是有原因的。因此,我相信这可能是一个 Grails 问题 - 特别是如果你使用的是“资源插件”。
如果你的插件提供了一个网站图标(不合逻辑地,很多人都这样做),它们可能会覆盖你想要使用的图标——因为你的插件本身就在插件中。
如果从所有插件中删除网站图标可以暂时解决问题,那么您很可能会遇到以下情况:
http://jira.grails.org/browse/GPRESOURCES-134
对于 Internet Explorer,还有另一种解决方案:
- 打开 Internet Explorer。
- 单击菜单>工具>互联网选项。
- 单击“设置”按钮>常规>临时Internet文件。
- 单击“查看文件”按钮。
- 找到旧的 favicon.ico 文件并将其删除。
- 重新启动浏览器(Internet Explorer)。
尝试在新标签页中打开
我尝试了上述许多方法(重置缓存、刷新、使用链接标签等),我什至检查了我的文件并重置了 ExpiresByType 变量。.htaccess
但这就是最终在 Chrome (25.0.x) 和 Safari (6.0.1) 中对我有用的东西:
- 刷新缓存
- 将图标与标签硬链接
<link>
- 导航到
mysite.com/favicon.ico
- 在新标签页中打开
mysite.com
(直到第 3 步,在同一选项卡中刷新会继续重现旧图标。
这是 chrome 错误的解决方法:将 rel 属性更改为样式表!不过,请保留原始链接。像魅力一样工作:
我想出了这个解决方法,因为我们还需要能够更新客户的站点/生产代码,而我没有找到任何其他解决方案。
评论
简单
1:我不想摆弄代码(ps我的网站构建器不使用代码,它使用“上传文件”按钮,它自己做)
2:我尝试了+,但它对我不起作用,所以....CTRLF5
我有一个解决方案:
IE:通过转到设置齿轮 O 清除所有浏览器历史记录和 cookie
Chrome:转到右上角看起来像 = 的 X 下方的菜单,然后转到设置、历史记录、清除浏览数据并选中所有适用的框(我从一开始就做了历史记录、cookie 并清空了捕获物)
评论
在Mac OS X上的Chrome中,可以使用favicon缓存删除文件
${user.home}/Library/Application Support/Google/Chrome/Default/Favicons
评论
${user.home}/Library/Application Support/Google/Chrome/Profile 1/Favicons
cmd+q
如果您使用的是 PHP ..那么你也可以使用这条线。
<link rel="shortcut icon" href="http://www.yoursite.com/favicon.ico?v=<?php echo time() ?>" />
它将在每次页面加载时刷新您的图标。
评论
如果您使用 PHP,您还可以使用图标的 MD5-Hash 作为查询字符串:
<link rel="shortcut icon" href="favicon.ico?v=<?php echo md5_file('favicon.ico') ?>" />
这样,网站图标在更改时将始终刷新。
正如评论中指出的,您还可以使用上次修改日期而不是 MD5-Hash 来实现相同的目的并节省一些服务器性能:
<link rel="shortcut icon" href="favicon.ico?v=<?php echo filemtime('favicon.ico') ?>" />
评论
在 MAC 上:+ - 或按住并单击浏览器中的重新加载按钮。⌘ShiftRCtrl
评论
在当前版本的 chrome(在 OSX 上)中,如果您执行以下操作,您将立即获得图标刷新:
- 将鼠标悬停在标签上
- 单击鼠标右键
- 选择重新加载
- 您的网站图标现在应该已刷新
这是我发现的在本地刷新网站图标的最简单方法。
评论
CMD
+Shift
+R
如果应用了上述某些步骤后问题仍然存在:
尝试重新启动 IIS 服务器。
Chrome 的图标支持有问题 - 忽略这个答案
我写这个答案的印象是,这就是在 Google Chrome 中刷新网站图标所需要的。然而,事实证明,这只能在前五分钟左右起作用,直到图标在 Chrome 的历史记录同步中不可挽回地丢失。
原始答案
您不必清除缓存、重新启动浏览器或重写 HTML - 您只需要更改图标的 URL 一次,这样浏览器就会忘记以前缓存的图标。
假设您已经通过页面中的元素定义了图标,您可以通过在控制台中运行此标准 JS 单行代码来做到这一点:<link>
<head>
[].slice.call(document.querySelectorAll('head>link[rel$="icon"]')).map(function(ln){ln.href+='?v=2'});
有关可以在生产环境中自动为最终用户执行此操作的更高级实现,请参阅 freshicon.js。
评论
?v=2
通过销毁浏览器用于存储旧网站图标的文件,您可以强制加载新网站图标。
- 关闭浏览器。确保不再有浏览器进程在运行(例如,检查任务管理器中的 或 )。
chrome.exe
firefox.exe
- 导航到浏览器存储用户文件的位置:
- 对于 Chrome,请转到 Chrome 数据目录。
- 对于 Firefox,请转到 Firefox 配置文件文件夹。
- 删除网站图标缓存。
- 对于 Chrome,请删除和
Favicons
Favicons-journal
- 对于 Firefox,删除
favicons.sqlite
- 对于 Chrome,请删除和
这几乎肯定会奏效。如果没有:
- 可能性 1:浏览器的更新改变了网站图标缓存的工作方式。请使用新说明编辑此答案。
- 可能性 2:你的图标问题与过度激进的缓存无关。相反,这可能是一个资源加载问题 - 使用开发人员工具,确保新的图标正确下载。
评论
%appData%/../Local/Google/Chrome/User Data/Default
~/.config/google-chrome/Default
它可能对少数人有用,但我遇到了同样的问题,发现它与文件发送有关,所以我给了它一个 777 权限,它起作用了,当然在你确定问题存在之后,确保将权限改回更安全的值。
评论
对于 macOS 上的 Chrome,如果您不想按照此处的建议删除整个 Chrome 网站图标数据库,则可以仅删除冲突的图标:
- 退出 Chrome
- 加载 favicons 数据库(在此处使用 sqlite):
sqlite3 ~/Library/Application\ Support/Google/Chrome/Default/Favicons
- 搜索导致问题的文件
select * from favicons where url = 'http://mysite.dev/favicon.ico';
- 如果您对输出感到满意:
delete from favicons where url = 'http://mysite.dev/favicon.ico';
或者,您可以搜索可以重用的模式来删除多个条目:
- 搜索导致问题的多个文件
select * from favicons where url like 'http://mysite.dev%';
- 再说一次,如果你对这个结果感到满意:
delete from favicons where url like 'http://mysite.dev%';
- 键入并按 return 退出 sqlite
.exit
- 重新启动 Chrome
我知道这是一个非常古老的问题,但它也是一个仍然相关的问题,尽管现在只适用于mozilla。(我不知道浏览器是做什么的,因为我们不为非标准浏览器编码)。
如果 Chrome 在标题中包含图标标签,则表现良好。
尽管mozilla很清楚这个问题,但像往常一样,他们从不解决烦人的小问题。甚至 6 年后。
因此,有两种方法可以强制使用firefox刷新图标。
让所有客户端卸载 firefox。然后重新安装。
在 url 栏中手动输入域 - 不要使用 http 或 www 只是域 (mydomain.com)。
当然,这假设您的 ns 记录仅包括域名的解析。
这适用于 Chrome:
在 Mac 上:删除文件
${user.home}/资源库/Application Support/Google/Chrome/Default/Favicons
在 Windows 上:删除文件
C:\Users[用户名]\AppData\Local\Google\Chrome\User Data\Default\Favicons C:\Users[用户名]\AppData\Local\Google\Chrome\User Data\Default\Favicons-journal
只需更改此文件名='favicon1.ico'
Chrome 版本:68.0.3440.106
只需重新启动 Chrome(在您的地址栏中):chrome://restart
请按照以下步骤更改应用程序图标:
- 在项目中添加 .ico 文件。
- 转到angular.json,然后在“projects”->“architect”->“build”->“options”->“assets”中,在这里为您的图标文件创建一个条目。请参阅 favicon.ico 的现有条目以了解如何操作。
- 转到 index.html 并更新图标文件的路径。例如
<link rel="icon" type="image/x-icon" href="abc.ico">
或者,使用 favicon.ico 重命名您的图标文件,并在目录中替换它。
- 重新启动服务器。
- 硬刷新浏览器,你就可以开始了。
在文件路径的末尾使用查询字符串。每次生成时,查询字符串变量值必须不同。
如果以前的版本是:
<link rel="icon" href="http://example.com/favicon.ico?v=v1" />
或
<link rel="icon" href="http://example.com/favicon.ico?v=stringA" />
那么下一个版本应该是:
<link rel="icon" href="http://example.com/favicon.ico?v=v2" />
或
<link rel="icon" href="http://example.com/favicon.ico?v=stringB" />
关闭所有 Google Chrome 窗口
再添加一个我在这里没有看到的答案。我尝试刷新我的 Google Chrome 缓存、重新加载标签页、刷新标签页、在新标签页中打开,甚至打开一个新窗口。没有什么对我有用。最终对我有用的是关闭所有 Google Chrome 窗口(如果你像我一样,你可能有 3+ 个带有一堆选项卡的窗口,甚至可能在另一个桌面上有更多的窗口/选项卡,不要忘记这些!关闭所有窗口后,请尝试打开一个全新的窗口并重新加载您的网站。
希望这对某人有所帮助!
额外提示:如果您想恢复所有窗口,可以按“Ctrl + Shift + 向上箭头 + T”来恢复窗口和选项卡。
使用“开发”菜单中的“清空缓存”是在 Safari 17 上唯一对我有用的东西。
MacOS 上的 SafariSafari 浏览器 17.1
除了这样做之外,没有一个报价解决方案对我有用:
- 在 Safari 偏好设置中启用开发者菜单
- 选择“清空缓存”
- 重新启动浏览器
上一个:Kotlin 产量示例
评论
favicon.ico