我如何强制一个图标刷新?

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

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

784078 次浏览

很可能是网络浏览器问题。您必须从浏览器中删除缓存,关闭浏览器并重新打开它。这应该可以解决它。

我不相信您的收藏夹图标会在您重新访问该页面之前刷新,并假设您之前已清除浏览器缓存。

你的网络浏览器不会自己去互联网上检查一个新的图标……谢天谢地。

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

重命名收藏夹文件并添加一个具有新名称的html标题,例如:

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

嗯,开销是开销,但是,是的,不是太大。

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

我的廉价解决方案是:

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

如果这个序列不起作用,那么其他事情正在发生。

当您从Google请求收藏夹图标时,您可以查看响应标头。

Last-Modified: Fri, 09 Jan 2009 16:35:02 GMTDate: Thu, 01 Dec 2010 00:00:01 GMTExpires: Fri, 01 Dec 2011 00:00:01 GMTCache-Control: public, max-age=31536000Age: 7

如果你在响应上放一个“Expires:”标头,客户端浏览器将在该时间戳之后重新请求该图标。在进行主动开发时,你可以将过期时间戳设置为未来的一两秒,并始终让它获取这个,尽管这是一个糟糕的长期计划。

还要确保你把完整的图像URL不仅仅是它的相对路径:

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

而不是:

images/favicon.ico

这是我如何用一个简单的动画图标和FireFox 3.6.13(测试版)来管理它它可能也适用于其他版本的FireFox,如果没有,请告诉我。这基本上是artlung的解决方案,但也解决了. gif文件:

  1. 我用FTP程序打开,下载了我的favicon.ico和favicon.gif文件,
  2. 然后从我的服务器文件中删除它们。
  3. 然后我按照artlung的建议在浏览器中打开它们:http://mysite.com/favicon.ico ANDhttp://mysite.com/favicon.gif一旦这些地址加载并显示404错误页面(“页面未找到”)
  4. 然后我将两个文件上传到我的服务器上,然后PRESTO-立即显示正确的图标。

lineofbird的答案如下改编,您可以执行以下操作:

  1. 通过输入地址e. g.直接进入地址栏中的图标url

    • www.yoursite.com/favicon.ico
    • www.yoursite.com/apple-touch-icon.png
  2. 输入导航到url

  3. 刷新Ctrl+F5

  4. 重新启动浏览器(例如Chrome,Firefox)

如果您只是对调试它以确保它已更改感兴趣,您可以在 /etc/hosts文件中添加一个虚拟条目并点击新的URL。该收藏夹图标不会被缓存,您可以确保您的新收藏夹正在工作。

除非更改图标的名称,否则您无法强制您的用户获取新副本

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

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

我最近恢复了我的书签,并正在寻找一种在不访问每个页面的情况下恢复收藏夹图标的方法。我的搜索把我带到了这个线程。

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

Simon,我想到目前为止没有其他答案被接受是有原因的。因此,我相信这个可以仍然是一个Grails问题-特别是如果你正在使用“资源插件”。

如果你的插件提供了一个图标(这是不合逻辑的),它们可能会覆盖你想要使用的图标——因为你的插件本身就在插件中。

如果从所有插件中删除收藏夹临时解决了问题,那么您很可能会遇到以下情况:

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

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

尝试在新标签中打开

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

但这最终在Chrome(25.0. x)和Safari(6.0.1)中对我有效:

  1. 刷新缓存
  2. 使用<link>标签硬链接收藏夹图标
  3. 导航到mysite.com/favicon.ico
  4. 在新标签中打开mysite.com

(直到步骤3,刷新在同一标签页中保持再现旧图标。)

这是chromebug的一个解决方法:将rel属性更改为样式表!不过保留原始链接。工作起来很有魅力:

我想出了这个解决方案,因为我们还需要能够更新客户的站点/生产代码,而我没有找到任何其他解决方案。

简单,

1:我不想摆弄代码(ps我的网站建设者不使用代码,它使用“上传文件”按钮,它自己做)

2:我尝试了CTRL+F5,但它不适合我,所以……

我有一个解决方案:

IE:通过转到设置齿轮O清除所有浏览器历史记录和cookie

Chrome:转到X下方右上角的菜单,看起来像一个=,然后转到设置,历史记录,清除浏览数据并选中所有适用的框(我做了历史记录,饼干和清空从时间开始的陷阱)

在Chrome在Mac OS X上可以删除文件与收藏夹缓存

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

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

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

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

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

在MAC上:+Shift-R或按住Ctrl并单击浏览器中的重新加载按钮。

这个答案还没有给出,所以我想我应该发布它。我在网上四处寻找,没有找到一个好的答案来测试本地开发中的收藏夹。

在当前版本的chrome(在OSX上)中,如果您执行以下操作,您将获得即时收藏夹图标刷新:

  1. 悬停在标签上
  2. 右键单击
  3. 选择重新加载
  4. 您的收藏夹图标现在应该刷新

这是我发现的在本地刷新收藏夹图标的最简单方法。

如果问题仍然存在,尽管应用了上面的一些步骤尝试重新启动IIS服务器。希望这有助于…

Chrome的支持是错误的-忽略这个答案

我写这个答案的印象是,这是谷歌Chrome中刷新图标所需要的。然而,事实证明,这只适用于前五分钟左右,直到图标获得不可挽回地迷失在Chrome的历史同步中

原答复

您不必清除缓存,重新启动浏览器,重写超文本标记语言-您只需要更改图标的URL一次,以便浏览器忘记先前缓存的图标。

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

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

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

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

  1. 关闭浏览器。确保不再运行浏览器进程(例如,检查任务管理器中的chrome.exefirefox.exe)。
  2. 导航到浏览器存储用户文件的位置:
  3. 删除图标缓存。
    • 对于Chrome,删除FaviconsFavicons-journal
    • 对于Firefox,删除favicons.sqlite

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

  • 可能性1:您的浏览器更新更改了图标缓存的工作方式。请使用新说明编辑此答案。
  • 可能性2:您的图标问题与过度缓存无关。相反,它可能是资源加载问题-使用开发人员工具,确保新图标正在正确下载。

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

对于macOS上的Chrome,如果您不想按照此处的建议删除整个Chrome图标数据库,您可以仅删除冲突的图标:

  1. 退出Chrome
  2. 加载收藏夹数据库(这里使用sqlite):

sqlite3 ~/Library/Application\ Support/Google/Chrome/Default/Favicons

  1. 搜索导致问题的文件

select * from favicons where url = 'http://mysite.dev/favicon.ico';

  1. 如果你对结果满意:

delete from favicons where url = 'http://mysite.dev/favicon.ico';


或者,您可以搜索可以重用以删除多个条目的模式:


  1. 搜索导致问题的多个文件

select * from favicons where url like 'http://mysite.dev%';

  1. 如果你对这个结果感到满意:

delete from favicons where url like 'http://mysite.dev%';


  1. 键入.exit并返回以退出sqlite
  2. 重启Chrome

我知道这是一个非常古老的问题,但它仍然是一个相关的问题,尽管这些天只适用于mozilla。(我不知道资源管理器做什么,因为我们不为非标准浏览器编码)。

如果Chrome在标题中包含图标标记,则表现良好。

尽管mozilla很清楚这个问题,但像往常一样,他们从来没有解决过烦人的小问题。

因此,有两种方法可以使用Firefox强制刷新图标。

  1. 让您的所有客户端卸载Firefox。然后重新安装。

  2. 在url栏中手动输入域-不要使用超文本传输协议或www只是域(mydomain.com)。

这当然假设您的ns记录仅包含域名的解析。

这适用于Chrome:

  • 在Mac上:删除文件

    ${user.home}/Library/应用程序支持/Google/Chrome /Default/Favicons

  • 在Windows上:删除文件

    C:\用户[用户名]\AppData\本地\Google\Chrome\用户数据\默认\FaviconsC:\用户[用户名]\AppData\本地\Google\Chrome\用户数据\默认\收藏夹日志

来源

只需更改此文件名='favicon1.ico'

Chrome版本:68.0.3440.106

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

请按照以下步骤更改应用程序图标:

  1. 在项目中添加您的. ico文件。
  2. 转到angular.json,在“项目”->“架构师”->“构建”->“选项”->“资产”中,在这里为您的图标文件创建一个条目。请参阅favicon.ico的现有条目以了解如何执行此操作。
  3. 转到index.html并更新图标文件的路径。

<link rel="icon" type="image/x-icon" href="abc.ico">

Alternatively, rename your icon file with favicon.ico and replace it in the directory.

  1. Restart the server.
  2. Hard refresh browser and you are good to go.

在文件路径末尾使用查询字符串。查询字符串变量值必须与每次构建不同。

如果以前的构建是:

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