旧浏览器(ie9以下、android 4.4 webview、ios 6 safari)不支持标签,连dom解析都失败,唯一可靠方案是双层结构嵌套flash回退或使用html5media polyfill;该库自动注入flowplayer flash实例,仅适用于内网/封闭系统,公网项目应明确放弃支持。

旧浏览器(IE9以下、Android 4.4 WebView、iOS 6 Safari)不支持 <audio></audio> 标签,硬加 source 或 JS 调用 play() 都无效;唯一可靠路径是降级到 Flash 或用 html5media 这类 polyfill。
IE8 及更早版本必须用 Flash fallback
这些浏览器连 <audio></audio> 标签都解析不了,直接忽略整个 DOM 节点。不能靠 CSS 隐藏/显示切换,也不能用 JS 检测后动态插入 —— 它们压根不认这个元素。
- 必须写双层结构:
<audio></audio>里嵌套<object></object>或<embed></embed>,让老 IE 回退到 Flash 播放器 - 推荐用
html5media库:它会在检测到不支持 HTML5 音频时,自动注入 Flowplayer 的 Flash 实例,并把src映射过去 - 引入方式简单:
<script src="https://cdn.jsdelivr.net/npm/html5media@1.1.8/dist/html5media.min.js"></script>,无需额外配置 - 注意:Flash 已于 2021 年终止支持,仅限内网或强兼容旧系统场景;公网项目应明确放弃 IE8–
Android 4.4 WebView 和 iOS 6–9 的“半支持”陷阱
它们能解析 <audio></audio>,但解码能力极弱:不支持 MP3 VBR 编码、拒绝 OGG、对 preload 完全忽略、canplay 事件几乎不触发。
- MP3 文件必须用 CBR(恒定比特率)编码,用
ffmpeg -i in.mp3 -acodec libmp3lame -b:a 128k -ar 44100 out.mp3重压 - 别写
<source src="a.ogg" type="audio/ogg"></source>—— 这些系统看到ogg后缀就跳过,连 MIME 都不比对 - 所有 JS 播放逻辑必须等
loadedmetadata后再调play(),canplay和canplaythrough在这些环境里基本不可靠 - 避免设置
currentTime到非零值再play(),它们不支持 seek,会静默失败
html5media 是什么,什么时候该用它
html5media 不是播放器,而是一个“桥接层”:它监听 audio 元素的属性和事件,转译成 Flash API 调用。但它只处理基础播放,不支持 Web Audio、loop 精确控制、音轨切换等现代特性。
- 适用场景:企业内网系统、政府旧版 OA、银行柜面终端页面等明确要求支持 IE8– 的封闭环境
- 不适用场景:面向公众的网站、PWA、需要音频可视化或实时处理的项目
- 它不改写你的 HTML 结构,所以可以和现代代码共存;但一旦启用,所有
audio元素都会被接管,无法单独关闭某一个 - 注意服务端:Flash 播放仍依赖正确 MIME 类型,
.mp3对应audio/mpeg,Nginx/Apache 必须配add_type audio/mpeg .mp3;
真正麻烦的不是“怎么播”,而是“怎么知道播没播”。旧环境里 error 事件常不抛出,networkState 常卡在 0(NETWORK_EMPTY),最稳的判断方式是启动一个 setTimeout 监控 duration 是否从 NaN 变成有效数字 —— 这比任何事件监听都实在。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











