Favicon在Firefox上无法展示的一个bug

今天组里有同事找到一个bug, 在html head里面已经声明了

<link type="image/x-icon" href="/forums/nav/common/images/iconForums16.ico" rel="shortcut icon">

但是firefox浏览器的上的icon却显示不出来。如图

Favicon在Firefox上无法展示的一个bug

原因何在?我研究了一下。得到下面的经验总结:

1,首先考虑,icon的url是正确的。

2,清空favicon的缓存,也就是firefox存储favicon的数据库。favicon并不是存放在我们通常所指的cache里,而是firefox的sqlite数据库存储了它。清空方法如下:

1)下载firefox add-ons sqlite manager.

2) 打开sqlite manager,选择连接数据库。填写 %APPDATA%\Mozilla\Firefox\Profiles

Favicon在Firefox上无法展示的一个bug

3)选择正确的profile. 然后选择如下DB,然后清空此数据库。是清空,不是删除哦。

Favicon在Firefox上无法展示的一个bug

4)完成,刷新页面,看favicon展示出来了没?

----------------------------------------------------------------

----------------------------------------------------------------

做完以上两步,我发现我的问题还没有得到解决。这是非常诡异的一件事情。到底是什么导致icon没有正确显示?是icon没真正的load?我用fiddler观察过网络传递,icon确实被请求过来了。但firefox没有认。

继续研究。。。

终于找到原因。

由于我们的网站大量使用了ajax,比如翻页都是局部刷新,所以我们的页码都是以hash的方式放在URL之中的。我们刷新下面的一个URL:

/forums/html/public?lang=en

在页面解析过程之中,我们会动态的给它加上当前页码,变成

/forums/html/public?lang=en#page=0

这就导致已经为/forums/html/public?lang=en load完的icon和最终的url无法对应,使得firefox不认此icon。所以icon显示不出来。

我猜想,整个过程如下,具体还需研究firefox对页面的加载过程:

请求 /forums/html/public?lang=en ->请求icon -> 关联icon和当前url -> 给url加了hash -> 页面加载完成 ->icon和url不匹配 -> 不展示icon.

解决方法是,hash要在页面完全load结束再加。

最后的两个疑问:

1, 为url添加hash是放在dojo.addOnLoad中执行的。addOnLoad应该是在document load完之后运行,为什么会出现以上情况?还需仔细研究。

2,Firefox的一个bug?

转载于:https://my.oschina.net/xpbug/blog/53845