HTML中的base標(biāo)簽使用詳解

在requireJS中,有一個(gè)屬性叫baseURL,通過(guò)設(shè)置baseURL,我們可以將需要加載的文件路徑寫成相對(duì)于項(xiàng)目的,而不是相對(duì)于當(dāng)前頁(yè)面的。
例如:假設(shè)我們的項(xiàng)目目錄是/myproject/,里面有兩個(gè)頁(yè)面,一個(gè)是/myproject/one.html,另一個(gè)是/myproject/html/other.html,他們都要加載/myproject/js/some.js。如果我們將baseURL設(shè)置成/myproject/,則我們?cè)诩虞d該js的時(shí)候,這兩個(gè)頁(yè)面都可以使用相對(duì)于項(xiàng)目的路徑./js/some,而不是因?yàn)轫?yè)面的路徑不同而使用不同的相對(duì)路徑。
但是如果不使用requireJS,我們能不能實(shí)現(xiàn)類似于baseURL的功能呢?
base標(biāo)簽
其實(shí),HTML中有一個(gè)base標(biāo)簽,可以產(chǎn)生類似的功能。舉個(gè)例子:
<html>
<head>
<base />
</head>
<body>
<img src="./images/logo_gray.gif" />
</body>
</html>
我們會(huì)發(fā)現(xiàn),我們用相對(duì)路徑./images/logo_gray.gif加載的圖片,卻變成了http://static.cnblogs.com/images/logo_gray.gif的圖片。
base標(biāo)簽可以給頁(yè)面的鏈接加上默認(rèn)的路徑,或者默認(rèn)的打開方式。
下面是一個(gè)設(shè)置默認(rèn)打開方式的例子:
<html>
<head>
<base target="_blank" />
</head></p> <p><body>
<a >這個(gè)頁(yè)面會(huì)在新窗口打開</a>
<a >這個(gè)頁(yè)面也會(huì)在新窗口打開</a>
</body>
</html>
一個(gè)BUG
base標(biāo)簽最好不要?jiǎng)討B(tài)寫入,否則在Firefox和IE中會(huì)有一個(gè)小bug,比如對(duì)于頁(yè)面http://localhost/static/test.html:
<html>
<head>
<script>
document.write('<base href="http://localhost/" />');
</script>
</head></p> <p><body>
<img src="static/1.jpg" />
</body>
</html>
Firefox和IE中會(huì)先加載http://localhost/static/static/1.jpg,然后再加載http://localhost/static/1.jpg。也就是說(shuō),他們都先嘗試用相對(duì)于當(dāng)前頁(yè)面的路徑進(jìn)行加載,然后再通過(guò)base標(biāo)簽設(shè)置的默認(rèn)路徑加載。
Chrome的加載正常。
Firefox的加載不正常。
Why?
這個(gè)我們并沒(méi)有找到很好的解釋,我們的分析是瀏覽器對(duì)資源加載進(jìn)行了優(yōu)化,導(dǎo)致動(dòng)態(tài)插入base標(biāo)簽并未生效時(shí),就預(yù)先去加載了,結(jié)果出錯(cuò),然后base標(biāo)簽生效于是又加載正確的資源。
如何避免呢?不動(dòng)態(tài)寫入base標(biāo)簽?zāi)敲淳蜎](méi)有任何問(wèn)題。如果需要?jiǎng)討B(tài)寫入base標(biāo)簽,那么頁(yè)面所有引用的外部資源都需要通過(guò)Javascript動(dòng)態(tài)加載。
相關(guān)文章
我的css框架——base.css(重設(shè)瀏覽器默認(rèn)樣式)
有自己css框架在網(wǎng)頁(yè)布局過(guò)程中會(huì)顯得相當(dāng)容易,本文提供的是本人的經(jīng)驗(yàn)之談主要功能在于重設(shè)瀏覽器默認(rèn)樣式,熱愛(ài)布局的你可千萬(wàn)不要錯(cuò)過(guò)了哈,希望可以幫助到你2013-03-19HTML5本地存儲(chǔ)之Database Storage應(yīng)用介紹
實(shí)際上,除了sessionStorage和localStorage外,HTML5還支持通過(guò)本地?cái)?shù)據(jù)庫(kù)進(jìn)行本地?cái)?shù)據(jù)存儲(chǔ),HTML5采用的是"SQLLite"這種文件型數(shù)據(jù)庫(kù),該數(shù)據(jù)庫(kù)多集中在嵌入式設(shè)備上,熟2013-01-06HTML5 Web Database 數(shù)據(jù)庫(kù)的SQL語(yǔ)句的使用方法
本文將詳細(xì)介紹HTML5 Web Database 數(shù)據(jù)庫(kù)的SQL語(yǔ)句的使用方法,需要了解的朋友可以參考下2012-12-09HTML5教程之html 5 本地?cái)?shù)據(jù)庫(kù)(Web Sql Database)
HTML5的Web SQL Databases(html5 本地?cái)?shù)據(jù)庫(kù))的確很唬人,當(dāng)你發(fā)現(xiàn)可以用與mysql查詢一樣的查詢語(yǔ)句來(lái)操作本地?cái)?shù)據(jù)庫(kù)時(shí),你會(huì)發(fā)現(xiàn)這東西挺有趣的,今天,我們一起來(lái)了解HT2014-04-03Web數(shù)據(jù)存儲(chǔ)淺析 Cookie、UserData、SessionStorage、WebSqlDatabase
淺析Web數(shù)據(jù)存儲(chǔ)-Cookie、UserData、SessionStorage、WebSqlDatabase 的使用方法。2010-08-06- 當(dāng)點(diǎn)了鏈接后,跳出的網(wǎng)頁(yè)地址是http://www.webjx.com/web/或http://www.webjx.com/css/,它就是在這些相對(duì)路徑的文件前加上基鏈接指向的地址。如果目標(biāo)文件中的鏈接沒(méi)有指2008-10-17
CSS標(biāo)準(zhǔn):vertical-align屬性
原文:http://www.mikkolee.com/13 最近幾天仔細(xì)研究了一下vertical-align這個(gè)屬性,結(jié)果讓我大吃一驚,這個(gè)很“資深”的CSS標(biāo)準(zhǔn)竟然在各個(gè)瀏覽器里面的表現(xiàn)2008-10-17