必须嵌套在或内才有效,否则报domexception且播放器空白;浏览器按序加载首个type匹配且状态码200的资源,type须与服务器content-type严格一致(如audio/mpeg非audio/mp3),路径错误或跨域时静默失败。

<audio></audio> 和 <video> 是唯二能直接触发媒体播放的 HTML 原生标签,其他如 <code><source></source>、<track></track> 必须嵌套在它们内部才有效;放错位置会导致控制台报 DOMException: The element has no supported sources,页面显示空白。
为什么 <source></source> 总是不加载?
浏览器按顺序解析 <source></source>,遇到第一个 type 匹配且 HTTP 状态码为 200 的资源就停止尝试,后续全部跳过。常见失效点:
-
type值与服务器实际返回的Content-Type不一致(例如写audio/mp3,但服务端发的是audio/mpeg,Safari 会静默忽略) -
src路径 404 或跨域被拦,Network 面板里看状态码才能确认 -
<source></source>写在<audio></audio>或<video></video>外部,或放在controls属性之后(必须在开始标签和结束标签之间,且最好紧贴开头)
<source></source> 的 type 怎么写才对?
MIME 类型不是凭经验猜的,必须和服务端响应头严格一致。常见组合:
文章转信息图。将文章/笔记转化为手机可读的 HTML 信息图,自动匹配视觉风格。触发场景:文章转图、笔记转图、信息图、转小红书图、做张图、可视化这篇文章、文生图。
- MP4 视频 →
type="video/mp4"(注意不是video/mpeg) - WebM 视频 →
type="video/webm" - MP3 音频 →
type="audio/mpeg"(不是audio/mp3) - OGG 音频 →
type="audio/ogg"
用 curl 或浏览器 Network 面板检查真实响应头:curl -I https://example.com/audio.mp3,确认 Content-Type 字段值。
autoplay 为什么没反应?
现代浏览器(Chrome、Safari、Edge)默认禁止带声音的自动播放,autoplay 必须配合 muted 才能生效:
- 带声音的
autoplay:几乎必然失败,控制台可能提示play() failed because the user didn't interact with the document first - 静音自动播放:
<video autoplay muted></video>或<audio autoplay muted></audio>可立即触发 - 想“有声自动播放”?只能靠用户首次交互(如点击按钮)后调用
play()方法
最容易被忽略的是:即使所有标签写对了,只要服务器返回的 Content-Type 和 type 属性不匹配,<source></source> 就不会被选中——这个判断发生在解析阶段,不报错、不警告,只静默跳过。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










