jQuery IE,如何停止<embed />元素

时间:2012-08-01 00:48:21

标签: jquery html

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

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

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 个答案:

答案 0 :(得分:5)

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

The DEMO.

function stopAudioPreHtml5() {
    var sound = $("#sound");
    if ($.browser.msie) {
       sound[0].stop();
    }
    sound.remove();
}

答案 1 :(得分:1)

也许把你的Soundfile放在iframe中,用jquery删除整个iframe?!

答案 2 :(得分: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()不会。

答案 3 :(得分: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);