html5中文学习网

您的位置: 首页 > 网页制作 > html教程 » 正文

HTML中的base标签使用详解_HTML/Xhtml_网页制作

[ ] 已经帮助:人解决问题
点评:在requireJS中,有一个属性叫baseURL,通过设置baseURL,我们可以将需要加载的文件路径写成相对于项目的,而不是相对于当前页面的

在requireJS中,有一个属性叫baseURL,通过设置baseURL,我们可以将需要加载的文件路径写成相对于项目的,而不是相对于当前页面的。3wCHTML5中文学习网 - HTML5先行者学习网

例如:假设我们的项目目录是/myproject/,里面有两个页面,一个是/myproject/one.html,另一个是/myproject/html/other.html,他们都要加载/myproject/js/some.js。如果我们将baseURL设置成/myproject/,则我们在加载该js的时候,这两个页面都可以使用相对于项目的路径./js/some,而不是因为页面的路径不同而使用不同的相对路径。3wCHTML5中文学习网 - HTML5先行者学习网

但是如果不使用requireJS,我们能不能实现类似于baseURL的功能呢?3wCHTML5中文学习网 - HTML5先行者学习网

base标签3wCHTML5中文学习网 - HTML5先行者学习网
其实,HTML中有一个base标签,可以产生类似的功能。举个例子:3wCHTML5中文学习网 - HTML5先行者学习网

复制代码
代码如下:
3wCHTML5中文学习网 - HTML5先行者学习网
<html>3wCHTML5中文学习网 - HTML5先行者学习网
<head>3wCHTML5中文学习网 - HTML5先行者学习网
<base href="http://static.cnblogs.com/" />3wCHTML5中文学习网 - HTML5先行者学习网
</head>3wCHTML5中文学习网 - HTML5先行者学习网
<body>3wCHTML5中文学习网 - HTML5先行者学习网
<img src="./images/logo_gray.gif" />3wCHTML5中文学习网 - HTML5先行者学习网
</body>3wCHTML5中文学习网 - HTML5先行者学习网
</html>3wCHTML5中文学习网 - HTML5先行者学习网
3wCHTML5中文学习网 - HTML5先行者学习网
我们会发现,我们用相对路径./images/logo_gray.gif加载的图片,却变成了http://static.cnblogs.com/images/logo_gray.gif的图片。3wCHTML5中文学习网 - HTML5先行者学习网

base标签可以给页面的链接加上默认的路径,或者默认的打开方式。3wCHTML5中文学习网 - HTML5先行者学习网

下面是一个设置默认打开方式的例子:3wCHTML5中文学习网 - HTML5先行者学习网

复制代码
代码如下:
3wCHTML5中文学习网 - HTML5先行者学习网
<html>3wCHTML5中文学习网 - HTML5先行者学习网
<head>3wCHTML5中文学习网 - HTML5先行者学习网
<base target="_blank" />3wCHTML5中文学习网 - HTML5先行者学习网
</head></p><p><body>3wCHTML5中文学习网 - HTML5先行者学习网
<a href="http://www.cnblogs.com">这个页面会在新窗口打开</a>3wCHTML5中文学习网 - HTML5先行者学习网
<a href="http://justany.cnblogs.com">这个页面也会在新窗口打开</a>3wCHTML5中文学习网 - HTML5先行者学习网
</body>3wCHTML5中文学习网 - HTML5先行者学习网
</html>3wCHTML5中文学习网 - HTML5先行者学习网
3wCHTML5中文学习网 - HTML5先行者学习网
一个BUG3wCHTML5中文学习网 - HTML5先行者学习网
base标签最好不要动态写入,否则在Firefox和IE中会有一个小bug,比如对于页面http://localhost/static/test.html:3wCHTML5中文学习网 - HTML5先行者学习网

复制代码
代码如下:
3wCHTML5中文学习网 - HTML5先行者学习网
<html>3wCHTML5中文学习网 - HTML5先行者学习网
<head>3wCHTML5中文学习网 - HTML5先行者学习网
<script>3wCHTML5中文学习网 - HTML5先行者学习网
document.write('<base href="http://localhost/" />');3wCHTML5中文学习网 - HTML5先行者学习网
</script>3wCHTML5中文学习网 - HTML5先行者学习网
</head></p><p><body>3wCHTML5中文学习网 - HTML5先行者学习网
<img src="static/1.jpg" />3wCHTML5中文学习网 - HTML5先行者学习网
</body>3wCHTML5中文学习网 - HTML5先行者学习网
</html>3wCHTML5中文学习网 - HTML5先行者学习网
3wCHTML5中文学习网 - HTML5先行者学习网
Firefox和IE中会先加载http://localhost/static/static/1.jpg,然后再加载http://localhost/static/1.jpg。也就是说,他们都先尝试用相对于当前页面的路径进行加载,然后再通过base标签设置的默认路径加载。3wCHTML5中文学习网 - HTML5先行者学习网
3wCHTML5中文学习网 - HTML5先行者学习网

3wCHTML5中文学习网 - HTML5先行者学习网

Chrome的加载正常。3wCHTML5中文学习网 - HTML5先行者学习网

3wCHTML5中文学习网 - HTML5先行者学习网

Firefox的加载不正常。3wCHTML5中文学习网 - HTML5先行者学习网

 3wCHTML5中文学习网 - HTML5先行者学习网

Why? 3wCHTML5中文学习网 - HTML5先行者学习网

这个我们并没有找到很好的解释,我们的分析是浏览器对资源加载进行了优化,导致动态插入base标签并未生效时,就预先去加载了,结果出错,然后base标签生效于是又加载正确的资源。3wCHTML5中文学习网 - HTML5先行者学习网

 3wCHTML5中文学习网 - HTML5先行者学习网

如何避免呢?不动态写入base标签那么就没有任何问题。如果需要动态写入base标签,那么页面所有引用的外部资源都需要通过Javascript动态加载。3wCHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助