在最近的一個項目中,為了跟蹤用戶的登錄的次數,我們在頁面打開時,將用戶登錄頁面的信息進行記錄。可在測試中卻發現一個用戶訪問一次的頁面,卻被記錄了二次,也就是說頁面被載入了二次。進一步測試后發現此問題,只是在FireFox,Google Chrome瀏覽器上才會出現。通過使用Fiddler監控發現,頁面在很短的時間內被瀏覽器載入了二次。
發生如此離奇的問題,讓我們百思不得其解。因為在頁面中,并不存在通過Javascript來觸發頁面刷新;也不存在頁面的特殊設置,讓頁面自動進行定時的刷新功能。不得已,只能采用笨方法,將頁面中的內容一點點的刪除掉,最后發現當頁面內嵌的樣式存在時,頁面就會被重復載入。樣式如下:
<style type=”text/css”>
content-wrap .wrap-main{background:url();}
content-wrap .wrap-main .colcomm .more{}
tem-main .left .col,.tem-main .left-3 .col,.tem-main .right-3 .col{margin-bottom:5px}
</style>
在樣式表中,為了將來自樣式文件中的.wrap-main的背景圖片給忽略掉,這里采用了在頁面文件中再次定義了.wrap-main的背景圖片,所以就出現了樣式表中第一行出現的
content-wrap .wrap-main{background:url();}
通過分析認為,頁面的二次加載的問題,很可能會與該處的樣式設置有關,于是將樣式修改為等價的:
content-wrap .wrap-main{background-image:none;}
再次運行頁面,并通過Fiddler進行跟蹤,這次頁面只加載了一次。看來問題確實是由于在頁面的內嵌樣式中錯誤地使用了url()引起的。
針對這個問題,我進一步進行了分析,得到如下結論:
1)在頁面內嵌的樣式表中,如果出現url()或url("")之類的,FireFox、Google Chrome瀏覽器會將url()或url("")解析為當前頁面的地址,所以會再次請求同一個頁面,這樣就出現了同一個頁面被載入二次的問題。因此,如果要在內嵌樣式表中實現諸如取消背景圖片的樣式時,可以采用background-image:none而不要采用background:url().
2)在.CSS文件中是的樣式,如果出現url()或url(""),同樣會導致.CSS文件被加載二次的問題。只是由于.CSS文件常常會在本地有緩存,所以當發現文件沒有修改時就不會再次請求同一個.CSS文件。
新聞熱點
疑難解答