Google HTML/CSS 代碼風格指南,里面有很多值得借鑒的地方
其中第一條說道,HTML 和 CSS 代碼中引用的圖片、媒體、CSS 和 JS 文件中的 URL 都可以去掉協議部分(http:
和 https:
),比如
<script src="http://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
都可以換成:
<script src="//www.google-analytics.com/ga.js" type="text/javascript"></script>
只要是使用 http
、https
這兩種協議都可以省略。原因是可以節省一點文件體積(當然只是那么一點點),另外一個原因 Google 說是可以解決混合內容的問題。起初我對這個第二點不是很了解,所以特意搜索了下。最后從 Paul Irish 的一篇文章找到答案,鏈接在文后。文章是兩三年前寫的,老外研究問題總是比我們要早啊。
以 //
開頭的叫做相對URL(protocol-relative URL),相關的標准可以看 RFC 3986 Section 4.2,內容不是一般的長估計大家也沒耐心去看吧。總之瀏覽器遇到相對 URL,則會根據當前的網頁協議,自動在 //
前面加上相同的協議。如當前網頁是 http
訪問,那么所有的相對引用 //
都會變成http://
。https
同理。如果你在本地查看,協議就會變成 file://
。
所以,如果省略協議,就需要保證引用的外部資源也采用和網頁相同的協議,或者保證資源可以同時通過 http
和 https
訪問。經過 StackOverflow 網友測試,這種用法幾乎所有的瀏覽器都能支持,只有在 IE7/8 下會有一點小問題,就是通過相對 URL 引用的 CSS 文件(無論 <link>
或 @import
)會被下載兩遍。所以對性能有一點影響。
至於 Google 提到的混合內容問題,其實是指IE有時會彈出的一個警告框:
這個框想必大家也都見過。通常是在瀏覽 https
網頁的時候出現,原因是網頁里引用了 http
協議的外部資源,由於 http
被認為是不安全的,IE 才會給出提示。如果引用的時候寫成相對 URL,瀏覽器就會自動采用 https
協議下載,這樣就解決了問題。
所以,我們平時寫代碼還是可以放心使用相對 URL 的,寫博客的大概很少開 https
,當然做項目的就例外了。如果你引用的資源里有 https
協議的就特別處理一下,或者只要 http
也能訪問到資源就可以。我看了下國內的站點這么用的還不多,有一次看到百度音樂這么用過。不過 Google 很多站點都已經是這樣的寫法了。