javascript - 有没有办法在网络应用程序中以编程方式播放音频?

标签 javascript html web-applications html5-audio progressive-web-apps

我正在构建一个网络应用程序,其中涉及在新订单进入应用程序时播放声音。在桌面上这一切都工作正常。

但是,在 iOS 上,音频根本无法播放。经过一些investigation我发现 iOS 在播放音频方面有限制。

  • 仅在用户交互之后
  • 仅当页面处于事件状态且位于前台时
  • 仅当手机屏幕打开时
  • 无法阻止屏幕关闭,因此您的音频将在第一首歌曲后停止。

有没有办法请求用户许可以允许以编程方式播放音频?

最佳答案

是的,这是真的!用户请求之前没有音频缓冲区。 使用一些弹出窗口或任何美观的动画来吸引用户点击。 您初始化播放,同时下一个代码行暂停,您将初始缓冲,然后您可以播放音频可编程性。 (就像老版本的自动播放问题一样)

在我的内存中... Android 和 iOS 没有相同的行为,它与我们可以使用此技巧启动缓冲区的最大音频数量有关(单击或触摸)。您需要对其进行测试。我的设备是 android 6,适用于 iOS 3 视频/音频。

如果您希望相同的音频在同一时刻播放多次: 最好使用相同的源创建更多音频 html 标签。

I 'm a fan of javascript but this time it is better to have html audio tags in html form (subjective feeling/ no proof).

    var EXE_JUST_ONE_TIME = false;

    document.addEventListener("touchstart" , function(e) {

    if (EXE_JUST_ONE_TIME == false){

     EXE_JUST_ONE_TIME = true;

     document.getElementById("LaserShot").play(); // need for play pause just for buffering start
     document.getElementById("LaserShot").pause();
     // now you can play programmability from js 
     document.getElementById("LaserShot_CLONE").play();
     document.getElementById("LaserShot_CLONE").pause();

    }
    else if(EXE_JUST_ONE_TIME = true){

     document.getElementById("MakeReadyotherAudio1").play();
     document.getElementById("MakeReadyotherAudio1").pause();

     document.getElementById("MakeReadyotherAudio2").play();
     document.getElementById("MakeReadyotherAudio2").pause();

     EXE_JUST_ONE_TIME = 'NOMORE'

   } 


    }

关于javascript - 有没有办法在网络应用程序中以编程方式播放音频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44650634/

相关文章:

javascript - Chrome 扩展弹出窗口中的 Google Chart?

javascript - PHP:从 case 语句中回显 JQuery 警报

Web API 中实体的 RESTful 归档

python - Google App Engine Web 应用程序框架是开源的吗?它在 GAE 之外可用吗?

javascript - jQuery .html() 大负载

java - 级联删除在使用 Hibernate 的 Java 程序中不起作用(随机行为)!

javascript - Meteor.js 仅更新一个参数而不是整个集合

javascript - firebase 回调中无法识别异步函数

html - 负 margin 打破 float

javascript - Box2dWeb 有没有办法将对象的 position.x 输出到 console.log()?