使用原生audio后报错 NotAllowedError: play() failed because the user didn't interact with the document first
时间: 2024-12-31 19:26:45 浏览: 59
当你尝试直接使用 `audio.play()` 方法播放音频时,浏览器可能会抛出 `NotAllowedError: play() failed because the user didn't interact with the document first` 错误。这是因为根据现代浏览器的政策,为了防止滥用音频自动播放功能干扰用户体验,除非用户有交互(例如点击页面或者滚动),否则不允许无条件地播放声音。
解决这个问题,你可以采取以下策略:
1. **用户交互触发**:在调用 `play()` 之前,检查是否有用户交互,例如添加一个点击事件:
```javascript
var audio = document.getElementById('myAudio');
document.addEventListener('click', function() {
if (!audio.paused && !audio.ended) {
audio.pause();
audio.play();
}
});
```
2. **使用 `autoplay` 属性谨慎使用**:如果你想在页面加载时自动播放音频,可以设置 `autoplay` 属性,但需要同时提供明确的暂停提示:
```html
<audio id="myAudio" autoplay muted playsinline>
<!-- ... -->
</audio>
```
然后在 JavaScript 中监听 `loadstart` 事件来判断是否开始播放:
```javascript
audio.addEventListener('loadstart', function() {
// 在这里取消静音或移除muted属性,允许声音播放
});
```
请注意,在某些场景下,用户的设备偏好或者网络环境可能还会禁止音频自动播放,因此始终应该考虑到用户的选择和体验。
阅读全文