会,但仅限于纯相对路径(如"sound.mp3");和的src属性受影响,而srcset、preload、autoplay、js动态赋值及data url等均不受影响。

base标签会影响<audio></audio>和<video></video>的src属性吗?
会,但仅限于纯相对路径(如"sound.mp3"或"clip.webm")。只要<audio src="sound.mp3"></audio>这类写法出现在<base>之后,且href值合法、位置正确,浏览器就会用base href作为起点拼接完整 URL。
哪些音视频路径实际受base控制?
只有满足“不以/、:、协议开头”的src值才被重写。常见有效场景包括:
-
<audio src="bgm.ogg"></audio>→ 拼成https://example.com/myapp/bgm.ogg(当<base href="/myapp/">时) -
<video src="intro.mp4"></video>→ 同样按base href解析 -
<source src="movie.webm" type="video/webm"></source>→<source></source>是<video></video>的子元素,其src同样受控
以下完全不受影响:
-
<audio src="/assets/audio/notify.mp3"></audio>(根相对路径) -
<video src="https://cdn.example.com/video/demo.mp4"></video>(绝对 URL) -
<video src="data:video/mp4;base64,..."></video>(data URL)
为什么preload="auto"或autoplay没让base失效?
这些属性只控制加载/播放行为,不改变路径解析逻辑。真正决定是否走<base>的是src字符串本身是否为纯相对路径。即使加了preload,只要src="track.aac",它就仍会被重写;反之,若写成src="./track.aac",这个./在 HTML 解析阶段不被识别为相对路径前缀——浏览器直接忽略./,按当前页面 URL 解析,<base>也管不了它。
容易踩的坑:动态设置src时base还起作用吗?
不起作用。一旦 HTML 解析完成,<base>的使命就结束了。后续 JS 执行audio.src = "loop.wav",这个赋值走的是运行时 URL 解析逻辑,完全绕过<base>。此时:
- 如果想保持路径一致,必须手动拼接:
audio.src = new URL("loop.wav", document.baseURI).href -
fetch()加载音视频二进制数据也不受<base>影响,得自己处理路径 -
<video></video>的srcset属性(如srcset="vid-2x.mp4 2x")同样完全不受控
最易被忽略的是:你检查 Network 面板看到track.mp3请求失败,却只盯着 JS 代码改src,忘了先确认<base>是否生效——它可能早被静默丢弃了,而你根本没在 Elements 面板里点开第一行看一眼。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











