【问题标题】:Start/pause audio in an embed tag ? (IE8+)在嵌入标签中开始/暂停音频? (IE8+)
【发布时间】:2012-08-10 19:47:33
【问题描述】:

我正在为一个必须播放背景音乐的小型网络游戏创建页面。这些页面应该与大多数桌面浏览器兼容,包括 IE8(但我们可以忽略移动浏览器)。

当然,我想让用户停止播放音乐。这就是棘手的地方。

这是我目前使用的(使用 jQuery):

<audio id="main_audio" autoplay="autoplay" preload="auto" loop="loop">
    <source src="sounds/bgmusic.mp3" type="audio/mpeg" />
    <source src="sounds/bgmusic.ogg" type="audio/ogg" />
    <embed hidden="true" autostart="true" loop="true" src="sounds/bgmusic.mp3" />
</audio>
<div id="controls" class="controls">
    <a id="playpause" class="play">Play/Pause</a>
</div>
<script>
    function isPlaying(audio) {return !audio.paused;}
    var a = document.getElementById('main_audio');
    $('#playpause').on('click', function() {
        if (isPlaying(a)) {
            a.pause();
        } else {
            a.play();
        }
    });
</script>

这适用于所有浏览器,但 IE。 (我在 Windows XP 上,所以目前在 IE8 上进行测试。) 在 IE8 上,音频开始播放(这很好),但控件不执行任何操作,因此无法停止音乐(然后重新启动)。

我怎样才能使这个脚本也适用于 IE?也就是说,和embed标签交互(但只在IE中)?

【问题讨论】:

    标签: javascript html internet-explorer audio embed


    【解决方案1】:

    尝试下一个代码:

    <audio id="main_audio" autoplay="autoplay" preload="auto" loop="loop">
        <source src="sounds/bgmusic.mp3" type="audio/mpeg" />
        <source src="sounds/bgmusic.ogg" type="audio/ogg" />
        <embed id="main_audio_ie8" hidden="true" autostart="true" loop="true" src="sounds/bgmusic.mp3" />
    </audio>
    <div id="controls" class="controls">
        <a id="playpause" class="play">Play/Pause</a>
    </div>
    <script>
        var isPlaying = function(audio) {return !audio.paused;}
        var a = document.getElementById('main_audio');
        if(!(a.play instanceof Function)){
            a = document.getElementById('main_audio_ie8');
            isPlaying = function(audio) {return audio.playState==2;}
        }
        $('#playpause').on('click', function() {
            if (isPlaying(a)) {
                a.pause();
            } else {
                a.play();
            }
        });
    </script>
    

    另一个变体(如果系统上存在 WMPlayer.OCX,则代码必须工作;在 Win2K+IE6SP1+WMP7、WinXP+IE6SP1+WMP9、WinXP+IE8+WMP11 上检查):

    <audio id="main_audio" autoplay="autoplay" preload="auto" loop="loop" volume="1.0">
        <source src="sounds/bgmusic.mp3" type="audio/mpeg" />
        <source src="sounds/bgmusic.ogg" type="audio/ogg" />
        <object id="main_audio_ie8" classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" style="display:none;"> 
            <param name="URL" value="sounds/bgmusic.mp3" />
            <param name="uiMode" value="invisible" /> 
            <param name="autoStart" value="true" />
            <param name="volume" value="100" />
            <param name="playCount" value="2147483647" /> <!-- (Int32) 2^31-1==2147483647 - maximum allowed count (for 1 second length audio is equals to 68+ years) -->
        </object> 
    </audio>
    <div id="controls" class="controls">
        <a id="playpause" class="play">Play/Pause</a>
    </div>
    <script type='text/javascript'>
    window.onload=function(){
        var isPlaying,a=document.getElementById('main_audio');
        if(a.play instanceof Function)isPlaying=function(audio){return !audio.paused;};
        else{
            a=document.getElementById('main_audio_ie8');
            isPlaying=function(audio){return audio.playState==3;};
            a.play=function(){this.controls.play();}
            a.pause=function(){this.controls.pause();}
        }
        document.getElementById('playpause').onclick=function() {
            if (isPlaying(a)) {
                a.pause();
            } else {
                a.play();
            }
        };
    };
    </script>
    

    【讨论】:

    • 非常感谢!我必须尝试一下,但它似乎很有希望。 :-)
    • 好的,我试过了,但是没用。 :( 经过测试,我注意到两件事:1) isPlaying 评估为“假”,即使正在播放音乐(自动启动)。 2)即使我将 a.pause() 放在“if”之外,它似乎也没有任何效果。实际上 a.pause() 会引发错误(Object 不支持此属性或方法),而 a.play() 则不会。但是 a.play() 似乎也不起作用(使用 autostart=false 测试)...
    • 实际上我尝试使用显示 a.playState 的警报,但似乎 playState 未定义。
    • @s427,嗯,我在 IE8 和 IE6-IE7 的 WinXP 上测试了这个(替换 jQuery 代码后)。一切正常。此方法使用 Windows Media Player ActiveX 对象来播放音频(在我的例子中,因为 IE8 不支持 HTML5
    • 这很奇怪。我没有看到任何警告(javascript 错误除外)。也许我的 IE 版本缺少某些组件?这是我可以使用您提出的代码制作的最简单的测试用例:cirrus.hsolutions.ch/teststemp/dk_tdm7s/test.php您能告诉我它在 IE 中是否适合您吗?
    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多