bgsound 的 loop 属性在现代浏览器中完全失效,仅旧版 ie 怪异模式下部分支持且行为不稳定;应改用 + javascript 实现可控循环。

bgsound 标签的 loop 属性确实能控制重复播放次数,但它的行为和你直觉想的不一样——它在绝大多数实际场景中根本不会按设定次数循环,甚至设了 loop="-1" 也可能只播一次。
为什么 loop 常常不生效
根本原因不是写法错,而是浏览器支持早已断裂:
-
bgsound是 IE 专属标签,仅在 IE 5.5–IE9 的怪异模式下部分生效;IE10+ 已彻底移除支持 - Chrome、Firefox、Edge(Chromium 版)、Safari 等现代浏览器完全忽略该标签,连解析都不做
- 即使在旧版 IE 中,
loop="2"实际表现也极不稳定:有时播完一次就停,有时卡在第二次中途,没有统一行为规范 - 关键限制:
bgsound在页面最小化时强制暂停,恢复后从暂停点继续——这直接破坏了“完整循环”的逻辑前提
loop 的合法取值与真实效果
语法上接受的值有限,但效果远不如文档描述可靠:
-
loop="1":表示“播放 1 次”,即不循环(等同于不写loop) -
loop="2"或任意正整数:理论上重播 N−1 次,但实测中多数只执行首播,后续无响应 -
loop="-1"或loop="infinite":文档称“无限循环”,实际在 IE 中常退化为单次播放 + 最小化即停 -
loop="true"或loop="false":非法值,IE 会静默忽略,不报错也不生效
替代方案比硬调 loop 更实际
如果你真需要可控的循环播放(比如背景音乐播 3 遍后停止),必须放弃 bgsound:
- 用
<audio></audio>标签 + JavaScript 控制:loop属性在现代浏览器中稳定有效,配合play()和ended事件可精确计数 - 避免依赖
<embed></embed>:它虽曾跨浏览器可用,但需用户安装插件(如 QuickTime、Windows Media Player),如今基本失效 - 不要尝试混合使用
bgsound+<audio></audio>做兼容 fallback:IE9 及以下不识别<audio></audio>,而新版浏览器又无视bgsound,结果是两边都漏 - 若必须支持极老 IE(如内网 IE6 环境),唯一可行路径是用 Flash 播放器(如 SoundManager2),但 Flash 已于 2021 年全平台终止支持,风险极高
真正棘手的不是怎么写 loop,而是当项目里还残留着 <bgsound src="bg.mp3" loop="-1"></bgsound> 这类代码时,它在当前任何一台新电脑上都不会响——连报错都没有,只是安静地不存在。











