controlslist="noplaybackrate" 对 <audio> 无效,因该值仅为 Chromium 系列浏览器针对 <video> 的非标准私有属性,HTML 规范未定义且未扩展至 <audio>;禁用音频倍速需通过移除原生控件、自定义 UI 或监听 ratechange 事件强制重置 playbackRate 为 1。

<audio> 标签的 controlslist 属性不支持 noplaybackrate 值,该值仅适用于 <video> 元素,且不是标准 HTML 属性,而是 Chrome/Edge 等基于 Chromium 的浏览器的非标准、实验性私有属性。
也就是说:
- ✅
<video controlslist="noplaybackrate">在部分浏览器中可隐藏倍速按钮(但兼容性差,且无规范保证) - ❌
<audio controlslist="noplaybackrate">无效,会被忽略,音频控件仍会显示并允许倍速播放(如 0.5x、1.5x、2x)
为什么 audio 不支持 noplaybackrate?
HTML 规范中 controlslist 仅定义了三个可选值:nodownload、nofullscreen、noremoteplayback。noplaybackrate 从未被标准化,且 Chromium 实现时也只将其应用于 <video>,未扩展到 <audio>。
如果想禁用音频倍速,可行方案有:
-
移除原生 controls,自建精简控件
隐藏默认控件,用 JavaScript + 自定义按钮控制播放/暂停/音量,不提供 playbackRate 操作接口:<audio id="myAudio" src="audio.mp3"></audio> <button onclick="document.getElementById('myAudio').play()">播放</button> <button onclick="document.getElementById('myAudio').pause()">暂停</button> -
重置 playbackRate 并监听防止修改
强制将playbackRate固定为1.0,并在ratechange事件中重置:<audio controls id="myAudio" src="audio.mp3"></audio> <script> const audio = document.getElementById('myAudio'); audio.playbackRate = 1; audio.addEventListener('ratechange', () => { if (audio.playbackRate !== 1) { audio.playbackRate = 1; } }); </script> 服务端或播放前预处理(不推荐)
倍速是客户端行为,无法通过 HTML 属性真正“屏蔽”,只能约束 UI 或干预 JS 行为。
注意事项
- 即使禁用 UI 或重置 rate,用户仍可通过 DevTools 直接执行
audio.playbackRate = 0.5绕过限制 - 教育类、版权敏感场景需结合 DRM 或流式加密(如 MSE + EME),单纯前端限制仅起提示/引导作用
不复杂但容易忽略:controlslist="noplaybackrate" 对 audio 无效,别白费时间写在那里。
立即学习“前端免费学习笔记(深入)”;



















