【问题标题】:Reusing HTML5 Audio Object in Mobile Safari在 Mobile Safari 中重用 HTML5 音频对象
【发布时间】:2011-01-25 22:03:06
【问题描述】:

我想在 iPad 上的 Mobile Safari 中运行的 Web 应用程序上播放一个短(小于 1 秒)的音频文件,以响应用户输入,同时将事件和音频播放之间的延迟降至最低。在页面重新加载之间可以多次触发播放,因此我想缓存音频文件。

以下内容会在第一次点击时播放文件,但之后什么都没有发生:

var audio = new Audio("ack.mp3");
$("#button").click(function(e) {
  e.preventDefault();
  audio.play();
}

如果我将事件侦听器添加到重新加载文件的“结束”事件,我可以从同一个对象获得两次回放,然后静音:

var audio = new Audio("ack.mp3");
audio.addEventListener('ended', function() {
  audio.load();
}, false);
$("#button").click(function(e) {
  e.preventDefault();
  audio.play();
}

如果我像这样手动将 currentTime 属性设置为 0:

var audio = new Audio("ack.mp3");
audio.addEventListener('ended', function() {
  audio.currentTime=0;
}, false);
$("#button").click(function(e) {
  e.preventDefault();
  audio.play();
}

我在错误控制台中收到以下错误:

INDEX_SIZE_ERR: DOM Exception 1: Index or size was negative, or greater than the allowed value.

关于如何完成这项工作的任何想法?提前致谢

【问题讨论】:

    标签: javascript ipad html audio mobile-safari


    【解决方案1】:

    currentTime 设置为0.1 而不是零,不要使用load() 否则会破坏ended 事件。

    如果您需要预加载媒体文件,请使用:

    media.play(); //start loading
    if(media.readyState !== 4){ //HAVE_ENOUGH_DATA
      media.addEventListener('canplaythrough', onCanPlay, false);
      media.addEventListener('load', onCanPlay, false); //add load event as well to avoid errors, sometimes 'canplaythrough' won't dispatch.
      setTimeout(function(){
        media.pause(); //block play so it buffers before playing
      }, 1); //it needs to be after a delay, otherwise it will block download and/or won't pause.
    }else{
      onCanPlay();
    }
    

    【讨论】:

      【解决方案2】:

      我遇到了完全相同的问题。 这是一个肮脏的把戏,但重置声音对象上的 src 对我有用:

      audio.src = audio.src;
      audio.play();
      

      【讨论】:

      • 试过这个,但似乎你需要在播放之间有 2 秒的延迟。否则,后续的播放将不会发生。
      • 这对我也不起作用。即使在 iOS 7 中(2011 年 2 月的最后回复)。
      猜你喜欢
      • 1970-01-01
      • 2015-12-05
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 2013-03-11
      相关资源
      最近更新 更多