问题 HTML5设置javascript中的音频源不起作用


由于HTML5浏览器格式技巧,我必须以音频格式提供后备音频格式。我想以编程方式在音频中设置源的src,但它不起作用。

这是我的HTML代码:

<audio id="audioPlayer" width="400" height="30" controls="controls">        
    <source id="oggSource" type="audio/ogg" />
    <source id="mp3Source" type="audio/mp3" />
</audio>

然后在使用jquery的javascript中我为它们设置了源代码(我在页面上有一个音频标签和许多mp3,并且基于某些事件我想改变音频标签的来源)所以我不能直接在音频中指定src因为我需要后备支持,我也需要动力。

使用jquery我操纵src:

$('#oggSource').attr('src', 'OggFormat.ogg');
$('#mp3Source').attr('src','Mp3Format.mp3');

但这不起作用。知道为什么吗?

如果我使用:

<audio id="audioPlayer" width="400" height="30" controls="controls">        
    <source id="oggSource" type="audio/ogg" src="OggFormat.ogg" />
    <source id="mp3Source" type="audio/mp3" src="Mp3Format.mp3"/>
</audio>

它工作,但我需要我需要在代码中设置它,而不是静态提供。


4137
2017-10-28 11:25


起源



答案:


运用 .detach().appendTo(parent) 似乎工作: http://jsfiddle.net/pimvdb/b7Jgh/

$("#oggSource").attr("src", "foo.ogg").detach().appendTo("#audioPlayer");

我猜浏览器只开始加载(并播放 autoplay) 如果一个 <source> 元素是 添加,而不是刚刚修改。我不确定为什么,但在分离工作后附加它。


编辑: 你也可以直接做 .appendTo 因为元素是唯一的(即它必须分离): http://jsfiddle.net/pimvdb/b7Jgh/6/

function updateSource(source, src) {
    source = $(source);
    source.attr("src", src).appendTo(source.parent());
}

14
2017-10-28 11:33



大!!我浪费了1小时后认为我做错了:) - TCM
不适用于Android - Moshe L
在Android浏览器上不起作用,但在chrome for android中有效 - dave


答案:


运用 .detach().appendTo(parent) 似乎工作: http://jsfiddle.net/pimvdb/b7Jgh/

$("#oggSource").attr("src", "foo.ogg").detach().appendTo("#audioPlayer");

我猜浏览器只开始加载(并播放 autoplay) 如果一个 <source> 元素是 添加,而不是刚刚修改。我不确定为什么,但在分离工作后附加它。


编辑: 你也可以直接做 .appendTo 因为元素是唯一的(即它必须分离): http://jsfiddle.net/pimvdb/b7Jgh/6/

function updateSource(source, src) {
    source = $(source);
    source.attr("src", src).appendTo(source.parent());
}

14
2017-10-28 11:33



大!!我浪费了1小时后认为我做错了:) - TCM
不适用于Android - Moshe L
在Android浏览器上不起作用,但在chrome for android中有效 - dave


在源元素上设置src属性后,调用load()然后在audio元素上播放()。 (或者,如果您设置了autoplay属性,则只需加载()。)


2
2017-10-28 11:53



在Chrome中至少不起作用。调用load()没有做任何事情并调用play()$('#audioPlayer')。play()抛出异常,没有名为play的方法存在。 - TCM
@Anthony,你必须在元素本身而不是Jquery对象上调用它们。也许<stackoverflow.com/questions/47837/...;你需要什么?我不使用Jquery,所以不知道。 - Shadow2531
嗯..对..在jquery上调用它在这种情况下不起作用。 - TCM


你有没有尝试过 document.getElementById("oggSource").src = 'OggFormat.ogg' 等等。?


0
2017-10-28 11:28



不起作用。 pimvdb解决了这个问题。 - TCM