Firefox无法显示网站图标(favicon)

73

我知道这个问题在这个网站上至少被问了一千次,但我已经阅读了许多相关帖子,我认为自己非常有知识并且很少提问,而是更喜欢自己去研究。

然而,这个问题非常奇怪,我无法从以前的讨论中获得真正的启示(因为这个问题已经被频繁地讨论过,但我仍然没有受益),这就是我的问题:

favicon.ico 存在,并且(在本地托管的开发网站)http://website/favicon.ico 显示了正确的图标。它的大小只有 198 字节,所以符合 Firefox 在 about:config 中找到的 1024 字节的大小限制。根据网络上关于 favicon 的智慧,当页面的 head 标签中没有 favicon 时,浏览器应该自行请求获取。但我的 Apache 日志清楚地显示,Firefox(9.01 版本)甚至没有请求获取。

接下来,当我添加

后,Firefox 突然开始请求获取 favicon.ico ...

<link rel="shortcut icon" href="/favicon.ico">

我还是没有设置网站图标。

接下来,当我使用以下代码时

<link rel="shortcut icon" href="/favicon.ico?">

(请注意结尾的“?”)我突然有了一个网站图标,但这不可能是缓存问题!第一,我已清除了缓存;第二,正如我上面提到的,我已经通过它的URL http://website/favicon.ico 成功地将图标文件加载到了Firefox中。

我无法解释Firefox的这种行为。顺便说一句,Chrome显示了正确的favicon。

这是我的页面头:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <link rel="shortcut icon" href="/favicon.ico?" />
</head>
...

只要在 "ico" 后至少附加 "?",它就能正常工作。

以下是当请求图标时服务器发送的内容,因为有人要求提供此信息。 我不知道这会有什么用,因为a)我说每次测试时我的缓存都是空的(也使用了 about:cache 进行了检查),并且b)我说当它没有显示时,服务器甚至没有被要求提供该文件。 Firefox 在没有附加 "?" 的情况下就不会发出请求 - 即使缓存为空!只有在使用附加的“?”时请求才会出现在 apache 日志中。

Date    Fri, 23 Dec 2011 12:53:22 GMT
Server  Apache/2.2.20 (Ubuntu)
Last-Modified   Fri, 23 Dec 2011 12:02:49 GMT
Etag    "12c07fe-c6-4b4c132190e30"
Accept-Ranges   bytes
Content-Length  198
Content-Type    image/x-icon

评论不是用于长时间讨论的;此对话已被移至聊天室。 (http://chat.stackoverflow.com/rooms/139241/discussion-on-question-by-morre-favicon-not-displayed-by-firefox-i-know-its-b) - elixenide
这已经是版主第五次回滚帖子,以删除你一再告诉不要再放回去的相同抱怨了。我现在已将其锁定,无法进行任何编辑。 - Martijn Pieters
5个回答

143

首先,确保您没有普通的缓存问题。通过直接加载 favicon 的 URL(将其放入浏览器的 URL 栏中)并进行强制刷新来检查。如果这样解决了问题,则无需使用以下复杂的解决方案。



重要提示:

我的原始问题不可能是一个缓存问题:首先,我清除了缓存,其次,如上所述,我已经通过它的 URL http://website/favicon.ico 成功地将图标文件加载到 Firefox 中

因此,当直接加载时,我可以在浏览器中正确地显示正确的图标!但我仍然有(或曾经有过)错误的图标显示为“favicon”。直接加载图标文件与实际的 favicon 位置的显示是独立的(当然,在第一次加载时除外)。

然而,如果您只有缓存问题,并且强制刷新可以解决问题,那么这个问题/问题不属于您!您的答案不是针对此问题的答案。

人们不应该忽视事实。当你被大量已回答和/或无用的问题轰炸时,问题的质量会受到影响,无论是现在还是存档。 令人惊讶的是,我不得不与那些仍然坚持强制刷新是答案的人斗争!



注意:您可以完全避免这个问题,只需使用类似 StackOverflow 的缓存破坏 URL 即可,他们的 favicon URL 以 .../img/favicon.ico?v=4f32ecc8f43d 结尾。

如果普通的缓存清除措施失败了(就像对我一样),可以在这里找到答案:"清除Firefox 3缓存中的所有网站图标[如何操作]" -- 还有一个该链接的archive.org版本(可能更慢,但不会消失)
以下是该页面的步骤:
  1. 安装Firefox附加组件SQLite Manager
  2. 从工具-> SQLite Manager中启动它
  3. 单击“数据库”菜单项(左上角)并选择“连接数据库”,输入%APPDATA%\Mozilla\Firefox
  4. 打开Profiles文件夹并转到您使用的配置文件
  5. places.sqlite选为要编辑的数据库文件(Firefox 61及更高版本:favicons.sqlite
  6. 选择moz_favicons表。使用右键单击上下文菜单中的“Empty table”,不要使用“Drop table”(表必须存在)仅在数据上使用右键单击上下文菜单并选择“删除”您要删除的一个条目(请参见下面的屏幕截图)

使用SQLite Manager删除条目的屏幕截图

我开始怀疑Firefox将图标缓存与其他所有内容分开 - 这是符合观察到的行为的唯一解释。所以我搜索了确认并找到了以上URL。接下来,我将尝试清除这个特定的额外缓存并看看会发生什么。

更新 - 已解决:通过使用“SQLite Manager” Firefox 插件删除favicon缓存后,一切都按照预期工作。

所以秘密就是Firefox中额外的(sqlite)FAVICONS 缓存,它不会被常规的“清除缓存”命令清除。

更新于2017年3月:我检查了此Firefox插件以及下面这个答案中建议的单独应用程序,两者都能胜任。根据其Github项目页面,SQLite Manager插件上次更新于约 2 年前,但在此情境下它仍然能够执行所需的操作。有人从forked该项目的人那里提供了更新,但那只是附带信息。


1
该工具并不能做比Firefox自带的更多:"临时文件、历史记录、Cookie、下载历史、表单历史"。 - Mörre
4
我知道这有点过时,但我发现在Chrome浏览器中,您可以直接将浏览器定位到网站图标本身,只需前往 http://www.yourwebsite.com/favicon.ico ,然后您的网站图标缓存就应该得到更新。 - Philippe Gilbert
2
@PhilippeGilbert 在Chrome中可能有效,但在Firefox中不行。 - Izzy
1
谢谢您的回答,我以为自己要疯了!我不知道Firefox处理网站图标缓存的方式与其他浏览器不同。 - Jeff Puckett
2
使用 Firefox 61,您需要打开并编辑 "favicons.sqlite" 数据库文件(而不是 "places.sqlite" 数据库文件)。 - Harry Mantheakis
显示剩余5条评论

4
很久以前,我知道,但在FF 31.0 / Windows上清除缓存的过程对我有用 - 也许这是新的。选项->网络->清除缓存的Web内容->立即清除。关闭FF,重新启动。不需要使用SqLite,新的favicon会加载。
然而,还有另一个潜在的问题。我试图为其刷新图标的网站的服务器具有/var/www的DocumentRoot。该网站位于foo.com/fubar,其中var/www/fubar链接到其他地方。换句话说,该网站比DocumentRoot低一级。这适用于Chrome、Opera和IE,但不适用于Safari或FF:
<link rel="shortcut icon" href="/favicon.ico" >

FF 在寻找网站图标时会在 /var/www 目录下查找,而不是 /var/www/fubar 目录下。这对于所有 5 种浏览器都有效:

<link rel="shortcut icon" href="favicon.ico" >

我刚刚尝试了使用FF 52,并从网络设置页面清除缓存,以及使用隐私选项中的“清除最近浏览历史记录”,但并没有触及SQLite数据库,它仍然保持不变。你的第二条评论“FF在/var/www中寻找favicon”与此无关,这只是非常简单和基本的“URL科学”,这取决于你个人的Web服务器设置。 - Mörre

3

以下是如何在不丢失所有网站图标的情况下完成此操作:

  1. 获取一个可以打开SQLite文件的工具,我使用的是DB browser for SQLite

  2. 在您的浏览器中输入about:profiles

  3. 打开默认配置文件的根文件夹。(请参考附带的图片)image

  4. 打开places.sqlite(Firefox 61+上为favicons.sqlite)文件。

  5. 进入moz_favicons表格。

  6. 过滤并删除您主机名的条目(请参考附带的图片)image

  7. 保存文件(请参考附带的图片)image

  8. 访问您的网站,它将显示新的网站图标。


没错,那个也可以。我刚试了一下你提出的工具和我最初提出的工具,它们的处理方式非常相似,尽管主观上至少在我简短地尝试时,我更喜欢 Firefox 的插件,但并没有太明显的区别。 - Mörre
1
顺便提一下,FYI:我冒昧地从你的答案顶部删除了我在答案中发布的URL的archive.org链接,因为我现在已经将其包含在我的答案中了,感谢你的提示!我认为这是可以的,因为你明确说明它是“被接受的答案”中的链接,否则我不会擅自干涉其他人的文本。 - Mörre
在Firefox删除SQLite引擎接口后,这个答案还有效吗?如何在Firefox Quantum(浏览器版本57)中安装SQLite Manager插件 - Ahmed Mostafa Abdel-Baky
1
@AhmedMostafaAbdel-Baky 在这里你直接编辑SQLite文件,所以我认为它应该可以工作。 - Suraj
3
除了我需要打开并编辑“favicons.sqlite”数据库文件(而不是“places.sqlite”数据库文件),这个解决方案对我在Firefox 61中也适用。 - Harry Mantheakis

3

我遇到了类似的问题。只需清除图片缓存即可。 我正在使用MVC Razor View。

    var link = document.createElement('link');
    link.type = 'image/x-icon';
    link.rel = 'shortcut icon';
    link.href = "/images/favicon.ico?t=@DateTime.Now.Ticks";
    var head = document.head || document.getElementsByTagName('head')[0];
    head.appendChild(link);

-3

我刚刚遇到了这个问题,似乎缓存、Cookie和历史记录都没有效果,但我做了以下操作解决了它。

1-右键单击书签(我的在工具栏菜单中) 2-点击属性 3-然后点击取消(似乎刷新了一些隐藏的缓存)

我相信点击“确定/保存”也会产生同样的效果。


很奇怪,图标在书签菜单中显示。但是在选项卡上没有显示。 - stark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接