HTML5 音频 - 测试无效状态错误(或 Dom 异常 11)

Posted

技术标签:

【中文标题】HTML5 音频 - 测试无效状态错误(或 Dom 异常 11)【英文标题】:HTML5 audio - testing for Invalid State Error ( Or Dom Exception 11 ) 【发布时间】:2012-10-10 16:53:16 【问题描述】:

我正在动态创建音频文件并动态更改源。但是,在我更改 src 并尝试更改 currentTime 后,我总是会收到 Invalid state 错误。你如何进行测试?或者更好地在它准备好时触发一个事件,然后调用 currentTime 来改变它的音频位置。

this.doneLoading = function(aTime)

    try
        this.mAudioPlayer.currentTime = aTime / 1000.0;
    catch(err)
        console.log( err );
    
    this.mAudioPlayer.play();   


this.playAtTime = function(aTime) 
    Debug("play at time audio: " + aTime);
    Debug("this.mAudioPlayer.currentTime: " + this.mAudioPlayer.currentTime);

     this.startTime = aTime;

    if (this.mAudioPlayer.src != this.mAudiosrc) 
        this.mAudioPlayer = new Audio();
        this.mAudioPlayer.src = this.mAudioSrc;
        this.mAudioPlayer.load();
        this.mAudioPlayer.play();
        this.mAudioPlayer.addEventListener('canplaythrough', this.doneLoading(aTime), false );
    
    else if ((isChrome() || isMobileSafari()) && aTime == 0) 
        this.mAudioPlayer.load();
        this.mAudioPlayer.currentTime = aTime / 1000.0;
        this.mAudioPlayer.play();
        Debug("Reloading audio");
    else

        this.mAudioPlayer.currentTime = aTime / 1000.0;
        this.mAudioPlayer.play();
           



;

【问题讨论】:

【参考方案1】:

对于那些真正需要测试来防止这种无效状态错误的人,你可以试试这个:

if(this.readyState > 0)
    this.currentTime = aTime;

无论如何似乎对我有用:)

【讨论】:

THIS WORKS 我认为这应该是公认的答案 THX【参考方案2】:

您没有将函数 reference 传递给您的 addEventListener - 您正在调用内联函数。 doneLoading() 函数立即执行(在文件加载之前)并且浏览器正确地抛出一个 INVALID_STATE_ERR:

this.mAudioPlayer.addEventListener('canplaythrough', this.doneLoading(aTime), false );

尝试传入一个函数reference。像这样:

this.mAudioPlayer.addEventListener('loadedmetadata',function()
    this.currentTime = aTime / 1000.0;
, false );

【讨论】:

谢谢,这对我来说绝对是一个非常糟糕的错误。

以上是关于HTML5 音频 - 测试无效状态错误(或 Dom 异常 11)的主要内容,如果未能解决你的问题,请参考以下文章

如何在不附加到 DOM 的情况下正确删除 html5 音频?

HTML5 音频文件未在 IE11 中显示

H5 Video + DOM

IMFSinkWriter :请求无效,因为已调用 Shutdown()

HTML5 视频 |视频不受支持/文件类型无效 | IE

MailChimp 错误状态:401 标题:“API 密钥无效”