![HTML并不简单:Web前端开发精进秘籍](https://wfqqreader-1252317822.image.myqcloud.com/cover/685/51089685/b_51089685.jpg)
2.1.7 为何<base>元素无人问津
先了解一下HTML<base>元素的作用。
<base>元素可以设置当前网页上下文的根地址,页面中所有设置的相对地址都会受此元素影响,例如:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_38_2.jpg?sign=1739403304-LIm6PolGKSdhMNO13OWSiVuSm8v22eHS-0-a998d3d3d8807cf11172d3e16e435696)
同时,页面中还有个如下所示的<a>元素:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_38_3.jpg?sign=1739403304-qjsGS64N7UItV015RaXJfX0KE1jV1WRv-0-2e94ea563ea5191ed8661126dfe82623)
点击“首页”字样的链接,浏览器会在新窗口打开https://www.htmlapi.cn/home.html地址。
注意,这里明明<a>元素并未设置任何target属性,却触发了打开新的浏览器窗口的行为,就是因为<base>元素设置了target="_blank"。
这么一看,似乎<base>还是很有用的,比如搜索结果列表页面,里面的链接就没必要一个一个地添加target="_blank"了,只要在页面顶部插入一个<base>元素就可以了。
话这么说没错,但是实际上并没有大家想得那么简单。
<base>元素的影响太广泛了,除<meta>元素无法受到影响之外,其余任何与链接地址相关的HTML属性都会受到影响,包括在JavaScript代码中运行的Ajax请求地址。
举个例子,在域名为htmlapi.cn的页面中有如下所示的<base>元素:
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_38_4.jpg?sign=1739403304-eRKf3LnWI8nZ4Hae52JHHo8ov3PKFGOi-0-e77657f40e7058c68fba8f87b57c1c21)
然后运行了如下所示的fetch请求。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_39_1.jpg?sign=1739403304-6UTE0XhitPJsWib5SESoDWiRnQUGEJRF-0-6cdf94f2acfa22b38fd63fddf71f3389)
此时,浏览器会请求https://www.cssworld.cn/assets/example.jpg地址,而不是https://htmlapi.cn/assets/example.jpg地址。
于是就会报跨域的错误,如图2-11所示。
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_39_2.jpg?sign=1739403304-OfC2XUizr58DkaVRZsa4VqFmsyQQGYTF-0-477c9ab88f4b2bdf51917d42629c64fb)
图2-11 fetch请求相对路径图片出错示意
![](https://epubservercos.yuewen.com/BADDE0/30121580904729906/epubprivate/OEBPS/Images/48048_39_3.jpg?sign=1739403304-uqizcCj2JeEyA9a3DzX5Mj6jjH5ZARgR-0-ab6a6947a54f36b72d93f1552c7923ba)
可以通过在浏览器中输入地址https://www.htmlapi.cn/2/1-7.html或扫码访问来体验。
正是由于<base>元素的影响过于深入与广泛,因此在日常开发中,不会使用<base>元素去定义页面的根路径,因为很容易出现意料之外的状况。
当然,存在即合理,大家可以理性对待<base>元素,不要将其当成“洪水猛兽”,当场景合适时,它还是可以大放异彩的。