今天組裏有同事找到一個bug, 在html head裏面已經聲明瞭html
<link type="image/x-icon" href="/forums/nav/common/images/iconForums16.ico" rel="shortcut icon">ajax
可是firefox瀏覽器的上的icon卻顯示不出來。如圖sql
緣由何在?我研究了一下。獲得下面的經驗總結:數據庫
1,首先考慮,icon的url是正確的。瀏覽器
2,清空favicon的緩存,也就是firefox存儲favicon的數據庫。favicon並非存放在咱們一般所指的cache裏,而是firefox的sqlite數據庫存儲了它。清空方法以下:緩存
1)下載firefox add-ons sqlite manager.網絡
2) 打開sqlite manager,選擇鏈接數據庫。填寫 %APPDATA%\Mozilla\Firefox\Profiles網站
3)選擇正確的profile. 而後選擇以下DB,而後清空此數據庫。是清空,不是刪除哦。url
4)完成,刷新頁面,看favicon展現出來了沒?spa
----------------------------------------------------------------
----------------------------------------------------------------
作完以上兩步,我發現個人問題尚未獲得解決。這是很是詭異的一件事情。究竟是什麼致使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?