IE8 HTMLMediaElement play()shim

时间:2014-06-02 09:05:39

标签: javascript html5 internet-explorer-8 mediaelement.js shim

以下代码在IE9 +(以及Firefox和Chrome中)播放声音。是否有一个库为IE8实现/ polyfill缺少功能(audio元素和play()方法)?

我无法使mediaelement.js正常工作,使用jQuery或将<object>置于<audio>内部似乎很难看。一些全局初始化(如shim.init(somepath))让shim找到它的flash文件很好,但是每个标签代码看起来不对,因为它应该可以自动化。

<!DOCTYPE HTML>
<html>
<head>
    <script type="text/javascript">
        function foo()
        {
            var audio = document.getElementById('foo')
            audio.play()    
        }

    </script>
</head>
<body>
    <audio id="foo" preload="none">
        <source src="foo.mp3" type="audio/mpeg">
        <source src="foo.ogg" type="audio/ogg">
        Your browser does not support the audio element.
    </audio>
    <button onclick="foo()">Play</button>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

您可以在不需要IE [7-8]中的额外库(或jQuery)或polyfill的情况下使MEJS工作,而无需在object标记中添加audio标记。

解决方法是在success设置中创建一个全局对象,IE可以在使用.play()之前使用该对象(...或{{1} })方法

所以,拥有这个简单的html

.pause()

您可以使用此代码:

<audio id="myAudioPlayer" src="media/audio.mp3" preload="none"></audio>

<button onclick="audioPlay();">Play</button> 
<button onclick="audioPause();">Pause</button> <!-- optional -->

注意我们添加了几个事件侦听器,因此我们只在需要时调用我们的方法(并避免在IE中多次播放)

参见 JSFIDDLE

注意

此代码适用于var audio; // global object to be used by IE (and all browsers as a matter of fact) var isPlaying = false; // flag for event listeners function audioPlay() { // only call play() method if audio is not playing // avoids multiple playbacks in IE if (!isPlaying) { audio.play(); isPlaying = true; } }; function audioPause() { // only call pause() method if audio is playing if (isPlaying) { audio.pause(); isPlaying = false; } }; jQuery(document).ready(function ($) { var player = new MediaElementPlayer("#myAudioPlayer", { success: function (mediaElement, domObject) { audio = mediaElement; // set value to global object to be used outside the success setting by IE // event listeners so we only call our functions when needed audio.addEventListener('playing', function () { isPlaying = true; }, false); audio.addEventListener('pause', function () { isPlaying = false; }, false); } }); }); // ready 个元素。 audio元素可能需要其他解决方法。