audio.buffered.end(0)在替换音频源时抛出错误

时间:2016-02-10 01:28:54

标签: javascript jquery audio

我使用HTMLMediaElement为我的网站构建了一个简单的音频播放器(由于个人原因我避免使用<audio>元素)

一切似乎都运行良好,但是当我想使用replaceAudio()替换源时,我收到此错误:

  

Uncaught IndexSizeError:无法在'TimeRanges'上执行'end':提供的索引(0)大于或等于最大边界(0)。

这是我的代码:

// ********************************************************************** //
// ****************************** Audio.js ****************************** //
// ********************************************************************** //

// Declare element and event listeners
audio = new Audio()

function replaceAudio() {
    audio.pause()
    audio.currentTime = 1;
    audio = new Audio('/static/users/' + trackUser + '/tracks/' + trackSlug + '.mp3');
    audio.load()
}
function addAudioEventListeners() {
    audio.addEventListener('timeupdate', updateProperties, false)
    audio.addEventListener('ended', audioEnded, false)
}
// *** Declare minor functions

// Sets the progress or buffer width
...

// Converts the time integers to formatted time
...

// Get properties and update them

function updateProperties() {

    ...

    function getAudioProps() {
        ...
        buffered = audio.buffered


        // Return the values
        return {time:time,dur:dur}
    }

    var getAudioProps = getAudioProps();
    ...
    var bufferend = buffered.end(0) / dur

    ...
    setAudioIndicatorWidth(bufferend, bufferElement);

}

function audioEnded() {}

1 个答案:

答案 0 :(得分:0)

在开始调用buffered.end(0)之前,先尝试检查buffered.length

如果(buffered.length大于0)  //调用buffered.end(0)/ buffered.start(0)