5

我目前正在尝试在我的网站上播放不同的 wav 文件。我目前正在使用 HTML5<audio>元素,但我也在尝试获得一些向后兼容性,因为 IE 不会通过音频标签播放 wav。

我创建了一个创建适当声音<embed>对象的 javascript 函数:

function createPreHtml5EmbedItem(callID, parent) {
            $("#sound").remove();
            var sound = $("<embed id='sound' controls='console' type='audio/wav' />");
            sound.attr('src', '/recording?id=' + callID);
            sound.attr('loop', false);
            sound.attr('hidden', false);
            sound.attr('autostart', true);
            parent.append(sound);
}

这一切都很好,但是当我点击不同的按钮时,我想停止播放这个音频元素。在 Firefox 中,我可以这样做:

function stopAudioPreHtml5() {
    $("#sound").remove();
}

但由于某种原因,这在 IE 中不起作用。有没有办法<embed>在我删除它之前停止当前正在播放的元素?

4

4 回答 4

5

对于 IE,你可以使用.stop()方法来阻止它。

演示。

function stopAudioPreHtml5() {
    var sound = $("#sound");
    if ($.browser.msie) {
       sound[0].stop();
    }
    sound.remove();
}
于 2012-08-09T03:26:18.447 回答
1

也许把你的声音文件放在一个 iframe 中,然后用 jquery 删除整个 iframe?!

于 2012-08-11T21:52:35.990 回答
0

当我有一个与 javascript 变量名相同的元素时,我在 IE 中遇到了问题。

在这种情况下,您的变量sound和您使用 id 创建的元素sound

在创建对象并将所有属性添加到对象时,我会尝试使用不同的变量名,例如

var soundIE = $("<embed id='sound' controls='console' type='audio/wav' />");

soundIE.attr('src', '/recording?id=' + callID);
soundIE.attr('loop', false);
soundIE.attr('hidden', false);
soundIE.attr('autostart', true);
$(parent).append(soundIE);
于 2012-08-15T23:00:27.830 回答
0
function createPreHtml5EmbedItem(callID, parent) {
            $("#sound").remove();
            var sound = $("<embed id='sound' controls='console' type='audio/wav' />");
            sound.attr('src', '/recording?id=' + callID);
            sound.attr('loop', false);
            sound.attr('hidden', false);
            sound.attr('autostart', true);
            $(parent).append(sound);
}

更改了附加行,对我来说效果很好。顺便说一句,如果您使用 .stop() 并且页面上有这么多的嵌入对象,则会导致性能问题。但 remove() 不会。

于 2012-08-15T12:31:18.097 回答