以下代码在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>
答案 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
元素可能需要其他解决方法。