首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS on iPad禁用Web

iOS on iPad禁用Web
EN

Stack Overflow用户
提问于 2016-05-25 08:09:19
回答 1查看 2.6K关注 0票数 6

请注意:本期发行于2016年11月在iOS 10.1.1中发行。谢谢苹果!

我无法通过网络音频API在iPad上播放任何音频。这是使用最新版本的iOS (从9.3.2-当前10.1)。

测试用例

这是我设置的赤裸的测试 (下面的代码)。所有的测试对我来说都不适用于iPad。在iPhone或其他兼容的浏览器上没有问题。有这里的另一个测试页面 (威廉·马龙的)。所有这些声音都没有在三台iPads上播放。最后,这个游戏使用Web (谢谢德里克),也是静音的。

如果您正在iPad上阅读这篇文章,请尝试裸骨试验并在注释(或私下和我联系)中报告,如果加载,然后播放,工作和播放声音。请包括iOS版本号(设置->通用->关于->版本)。

任何见解或反馈将是非常感谢的!

下面是测试代码:

代码语言:javascript
运行
复制
<!DOCTYPE html>
<html>
<head>
    <title>Web Audio API - iPad Test</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="./jquery-2.2.3.min.js"></script>
    <style>
        section { padding:10px; margin:0 0 10px; background:DarkSeaGreen }
        a { cursor:pointer; display:block; background: DarkSeaGreen; padding:10px; margin:0 0 3px }
    </style>
</head>
<body>
    <script>
        var app = {};
        $(document).ready(function() {
            // Do we have Web Audio API?
            try {
                window.AudioContext = window.AudioContext || window.webkitAudioContext;
                audioContext = new AudioContext();
            } catch (e) {
                alert('Web Audio API is not supported in this browser');
            }
            $('#loadClick').on('click',function(){load('./ipad_test.mp3')});
            $('#playTouchEnd').on('touchend',play);
            $('#playTouchStart').on('touchstart',play);
            $('#playClick').on('click',play);
            $('#unlockTouchEnd').on('touchend',unlock);
            $('#unlockTouchStart').on('touchstart',unlock);
            $('#unlockClick').on('click',unlock);
        });
        function unlock() {
            // play empty buffer to unmute audio
            var buffer = audioContext.createBuffer(1, 1, 22050);
            var source = audioContext.createBufferSource();
            source.audioContext = buffer;
            source.connect(audioContext.destination);
            source.start(0);
            $('#messages').append('<p>Unlocked.</p>');
        }
        function load(file) {
            if(app.loaded) {
                $('#messages').append('<p>Already loaded.</p>');
                return;
            }
            var request = new XMLHttpRequest();
            request.open ('GET', file, true);
            request.responseType = 'arraybuffer';
            request.onload = function () {
                audioContext.decodeAudioData(
                        request.response,
                        function (buffer) {
                            app.buffer = buffer;
                            $('#messages').append('<p>Loaded.</p>');
                            app.loaded = 1;
                        },
                        function(){alert('Load error.');}
                )
            };
            request.send();
        }
        function play() {
            if(!app.loaded) {
                $('#messages').append('<p>Please load before playing.</p>');
                return;
            }
            var sourceNode = audioContext.createBufferSource();
            sourceNode.buffer = app.buffer;
            sourceNode.connect (audioContext.destination);
            sourceNode.start(0);
            $('#messages').append('<p>Playing.</p>');
        }
    </script>
    <h1>Web Audio API Test</h1>
    <p>Unlock should not be needed at all, but offers an alternative way to try and get the audio going. Load and then play should be all any compatible device needs. Refresh to start again.</p>
    <a id="unlockTouchEnd">Unlock (touchend)</a>
    <a id="unlockTouchStart">Unlock (touchstart)</a>
    <a id="unlockClick">Unlock (click)</a>
    <a id="loadClick" style="background:#c0c0c0">Load (click)</a>
    <a id="playTouchEnd">Play Audio (touchend)</a>
    <a id="playTouchStart">Play Audio (touchstart)</a>
    <a id="playClick">Play Audio (click)</a>
    <section id="messages"></section>
</body>
</html>

背景

要使Web工作,必须从用户操作中启动音频的苹果文档说明了这一点。他们说:

注意:在iOS上,Web要求从一个显式用户操作(如抽头)中触发声音。从onload事件调用noteOn()不会播放声音。

网上有很多关于这方面问题的帖子,最近的一次是2015年秋季的iOS 9.0到9.2:

  • 来自HTML 5游戏开发的线程 (2015年秋季问题)
  • 威廉·马龙 (2015年秋季问题)
  • 解锁技术( 保罗·巴库斯 )
  • 禤浩焯全息 (2015年秋季问题)

他们建议从一个触屏事件中启动音频来解锁iOS音频(或者在当时有问题时触发)。我已经尝试了所有建议的技术,无法获得触屏启动,触屏或点击工作。音频总是在iPad上静音。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-01 03:36:24

苹果于2016年11月10日在iOS上修正了这一问题。谢谢你苹果!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37431296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档