功能检测自动播放 HTML5 音频 - 移动浏览器上的音频

2024-02-25

因此,我有一个网站,用户希望演示服务器端脚本生成的音频输出。他们选择一些选项并点击创建按钮。然后我在 HTML5 音频元素中进行 AJAX,并将 autoplay 属性设置为 true。这在桌面上效果很好,但在移动设备上效果不佳。

到目前为止,我的解决方法是使用 PHP 代码片段根据用户代理字符串确定访问我的网站的设备是否是移动设备。然后,我将显示 HTML5 音频播放器,以便用户可以点击播放按钮来继续播放音频。

问题是,用于检测移动设备的用户代理字符串现在不适用于较新的手机。所以我的坏习惯终于又回来困扰我了。有没有一种方法可以检测自动播放音频的能力?


是的,确实有办法做到这一点。

以下是一个经过尝试和测试的简短示例,用于检测浏览器对自动播放属性的支持,您可以将其用于桌面和移动浏览器GitHub https://gist.github.com/mrcoles/5537536.

示例如下,附有我自己的评论解释其工作原理:

var AUTOPLAY = false; // A flag to be used in the anonymous function

(function() {

    // Audio file data URIs; MP3 + OGG
    var mp3 = 'data:audio/mpeg;base64,/+MYxAAAAANIAUAAAASEEB/jwOFM/0MM/90b/+RhST//w4NFwOjf///PZu////9lns5GFDv//l9GlUIEEIAAAgIg8Ir/JGq3/+MYxDsLIj5QMYcoAP0dv9HIjUcH//yYSg+CIbkGP//8w0bLVjUP///3Z0x5QCAv/yLjwtGKTEFNRTMuOTeqqqqqqqqqqqqq/+MYxEkNmdJkUYc4AKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq';
    var ogg = 'data:audio/ogg;base64,T2dnUwACAAAAAAAAAADqnjMlAAAAAOyyzPIBHgF2b3JiaXMAAAAAAUAfAABAHwAAQB8AAEAfAACZAU9nZ1MAAAAAAAAAAAAA6p4zJQEAAAANJGeqCj3//////////5ADdm9yYmlzLQAAAFhpcGguT3JnIGxpYlZvcmJpcyBJIDIwMTAxMTAxIChTY2hhdWZlbnVnZ2V0KQAAAAABBXZvcmJpcw9CQ1YBAAABAAxSFCElGVNKYwiVUlIpBR1jUFtHHWPUOUYhZBBTiEkZpXtPKpVYSsgRUlgpRR1TTFNJlVKWKUUdYxRTSCFT1jFloXMUS4ZJCSVsTa50FkvomWOWMUYdY85aSp1j1jFFHWNSUkmhcxg6ZiVkFDpGxehifDA6laJCKL7H3lLpLYWKW4q91xpT6y2EGEtpwQhhc+211dxKasUYY4wxxsXiUyiC0JBVAAABAABABAFCQ1YBAAoAAMJQDEVRgNCQVQBABgCAABRFcRTHcRxHkiTLAkJDVgEAQAAAAgAAKI7hKJIjSZJkWZZlWZameZaouaov+64u667t6roOhIasBACAAAAYRqF1TCqDEEPKQ4QUY9AzoxBDDEzGHGNONKQMMogzxZAyiFssLqgQBKEhKwKAKAAAwBjEGGIMOeekZFIi55iUTkoDnaPUUcoolRRLjBmlEluJMYLOUeooZZRCjKXFjFKJscRUAABAgAMAQICFUGjIigAgCgCAMAYphZRCjCnmFHOIMeUcgwwxxiBkzinoGJNOSuWck85JiRhjzjEHlXNOSuekctBJyaQTAAAQ4AAAEGAhFBqyIgCIEwAwSJKmWZomipamiaJniqrqiaKqWp5nmp5pqqpnmqpqqqrrmqrqypbnmaZnmqrqmaaqiqbquqaquq6nqrZsuqoum65q267s+rZru77uqapsm6or66bqyrrqyrbuurbtS56nqqKquq5nqq6ruq5uq65r25pqyq6purJtuq4tu7Js664s67pmqq5suqotm64s667s2rYqy7ovuq5uq7Ks+6os+75s67ru2rrwi65r66os674qy74x27bwy7ouHJMnqqqnqq7rmarrqq5r26rr2rqmmq5suq4tm6or26os67Yry7aumaosm64r26bryrIqy77vyrJui67r66Ys67oqy8Lu6roxzLat+6Lr6roqy7qvyrKuu7ru+7JuC7umqrpuyrKvm7Ks+7auC8us27oxuq7vq7It/KosC7+u+8Iy6z5jdF1fV21ZGFbZ9n3d95Vj1nVhWW1b+V1bZ7y+bgy7bvzKrQvLstq2scy6rSyvrxvDLux8W/iVmqratum6um7Ksq/Lui60dd1XRtf1fdW2fV+VZd+3hV9pG8OwjK6r+6os68Jry8ov67qw7MIvLKttK7+r68ow27qw3L6wLL/uC8uq277v6rrStXVluX2fsSu38QsAABhwAAAIMKEMFBqyIgCIEwBAEHIOKQahYgpCCKGkEEIqFWNSMuakZM5JKaWUFEpJrWJMSuaclMwxKaGUlkopqYRSWiqlxBRKaS2l1mJKqcVQSmulpNZKSa2llGJMrcUYMSYlc05K5pyUklJrJZXWMucoZQ5K6iCklEoqraTUYuacpA46Kx2E1EoqMZWUYgupxFZKaq2kFGMrMdXUWo4hpRhLSrGVlFptMdXWWqs1YkxK5pyUzDkqJaXWSiqtZc5J6iC01DkoqaTUYiopxco5SR2ElDLIqJSUWiupxBJSia20FGMpqcXUYq4pxRZDSS2WlFosqcTWYoy1tVRTJ6XFklKMJZUYW6y5ttZqDKXEVkqLsaSUW2sx1xZjjqGkFksrsZWUWmy15dhayzW1VGNKrdYWY40x5ZRrrT2n1mJNMdXaWqy51ZZbzLXnTkprpZQWS0oxttZijTHmHEppraQUWykpxtZara3FXEMpsZXSWiypxNhirLXFVmNqrcYWW62ltVprrb3GVlsurdXcYqw9tZRrrLXmWFNtBQAADDgAAASYUAYKDVkJAEQBAADGMMYYhEYpx5yT0ijlnHNSKucghJBS5hyEEFLKnINQSkuZcxBKSSmUklJqrYVSUmqttQIAAAocAAACbNCUWByg0JCVAEAqAIDBcTRNFFXVdX1fsSxRVFXXlW3jVyxNFFVVdm1b+DVRVFXXtW3bFn5NFFVVdmXZtoWiqrqybduybgvDqKqua9uybeuorqvbuq3bui9UXVmWbVu3dR3XtnXd9nVd+Bmzbeu2buu+8CMMR9/4IeTj+3RCCAAAT3AAACqwYXWEk6KxwEJDVgIAGQAAgDFKGYUYM0gxphhjTDHGmAAAgAEHAIAAE8pAoSErAoAoAADAOeecc84555xzzjnnnHPOOeecc44xxhhjjDHGGGOMMcYYY4wxxhhjjDHGGGOMMcYYY0wAwE6EA8BOhIVQaMhKACAcAABACCEpKaWUUkoRU85BSSmllFKqFIOMSkoppZRSpBR1lFJKKaWUIqWgpJJSSimllElJKaWUUkoppYw6SimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUUkoppZRSSimllFJKKaVUSimllFJKKaWUUkoppRQAYPLgAACVYOMMK0lnhaPBhYasBAByAwAAhRiDEEJpraRUUkolVc5BKCWUlEpKKZWUUqqYgxBKKqmlklJKKbXSQSihlFBKKSWUUkooJYQQSgmhlFRCK6mEUkoHoYQSQimhhFRKKSWUzkEoIYUOQkmllNRCSB10VFIpIZVSSiklpZQ6CKGUklJLLZVSWkqpdBJSKamV1FJqqbWSUgmhpFZKSSWl0lpJJbUSSkklpZRSSymFVFJJJYSSUioltZZaSqm11lJIqZWUUkqppdRSSiWlkEpKqZSSUmollZRSaiGVlEpJKaTUSimlpFRCSamlUlpKLbWUSkmptFRSSaWUlEpJKaVSSksppRJKSqmllFpJKYWSUkoplZJSSyW1VEoKJaWUUkmptJRSSymVklIBAEAHDgAAAUZUWoidZlx5BI4oZJiAAgAAQABAgAkgMEBQMApBgDACAQAAAADAAAAfAABHARAR0ZzBAUKCwgJDg8MDAAAAAAAAAAAAAACAT2dnUwAEAAAAAAAAAADqnjMlAgAAADzQPmcBAQA=';

    try {
        var audio = new Audio(); // Construct new Audio object
        var src = audio.canPlayType('audio/ogg') ? ogg : mp3; // Ternary statement determining the value of the src variable, which will be either ogg or mp3.
        audio.autoplay = true; // Set autoplay to true

        // This event will only be triggered if setting the autoplay attribute to true works.             
        $(audio).on('play', function() {
            AUTOPLAY = true; // Set the global flag to true, indicating we have support.
        });

        audio.src = src; // Set the audio objects src to the value of the src variable.
    } catch(e) {
        console.log('[AUTOPLAY-ERROR]', e);
        // This means we were unsuccessful - this browser doesn't support the autoplay attribute.
    }
})(); // Invoke anonymous function.

有一个使用此代码片段的示例PicDinner.com http://picdinner.com/

对于OP用于其特定用例的稍微修改的版本,检查他的答案 https://stackoverflow.com/a/17836886/1586880.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

功能检测自动播放 HTML5 音频 - 移动浏览器上的音频 的相关文章

随机推荐

  • 将支持库添加到 NuGet 包而不添加为引用

    我有一组 DLL 一些是由项目直接引用的 另一些只是支持这些 DLL 并不用于直接交互 我知道如何添加文件作为 NuGet 的项目引用 将它们放在 lib 文件夹中 但是如何让 DLL 在构建过程中被拾取而不是项目引用呢 NuGet Cod
  • ASP.NET MVC 3 在文章视图中添加评论

    我有文章模型public ICollection
  • 从模型中获取在数据透视表 Laravel 5 中没有条目的所有记录

    我正在尝试弄清楚如何实现以下目标 我找了又找 没有结果 我在 Laravel 5 应用程序中有一个数据透视表 它按预期工作 并在相应模型中具有以下功能 Module php public function sites return this
  • 使用 Python setuptools 的安装后脚本

    是否可以将安装后 Python 脚本文件指定为 setuptools setup py 文件的一部分 以便用户可以运行以下命令 python setup py install 在本地项目文件存档上 或者 pip install
  • Spring框架-在哪里解析JWT以进行自定义声明?

    我创建了一个 Spring JWT 授权应用程序 JWT 包含一些自定义声明 在资源服务器端 我想知道我应该在哪里解析 JWT 令牌来收集和检查这些声明 我应该在控制器或某些过滤器中执行此操作吗 最好的做法是什么 也许你有一些例子 您可以结
  • 无法使用flask-assets从sass文件生成all.css文件

    我厌倦了在我的 Flask 应用程序中使用 css 所以我决定使用 Flask 资产转向 scsshttps github com miracle2k flask assets https github com miracle2k flas
  • Spring ApplicationContext Bean 范围

    当您在 Spring applicationContext xml 文件中创建 Service bean 或 Dao bean 时 这些 bean 的范围是什么 每个访问 Web 应用程序的人都会使用同一个 Bean 实例 还是为每个用户的
  • 如何使用 swing 组件向 JLabel 添加刷新计时器

    我正在创建一个迷宫游戏 并希望在游戏舞台上显示一个计时器 我尝试过使用 java util 但它要求我摆脱我的摆动计时器 我怎样才能在游戏中添加一个令人耳目一新的计时器 此代码用于制作包含按钮窗格和游戏舞台的游戏框架 import java
  • 我可以安全地查询被 WRITE_TRUNCATE 替换的 BigQuery 表吗

    If configuration load writeDisposition https developers google com bigquery docs reference v2 jobs configuration load wr
  • 为 iPad / iPhone 加载不同的启动屏幕

    我想为 iPad 和 iPhone 加载不同的启动屏幕故事板 为此我在 info plist 中添加新条目 如下所示 但它只加载 iPhone 启动屏幕 任何帮助将不胜感激 提前致谢 Way 1 为此 您必须使用两个 xib 一款适用于 i
  • 如何用Java创建停靠面板?

    如何用 Java 创建停靠面板 如果你想使用Swing http en wikipedia org wiki Swing 28Java 29在你的应用程序中的对接框架中 有一些已经存在 InfoNode http www infonode
  • 读取带有unicode字符的文件

    我有一个 asp net c 页面 并尝试读取具有以下字符 的文件并将其转换为 从倾斜撇号到撇号 FileInfo fileinfo new FileInfo FileLocation string content File ReadAll
  • 如何使用 python 列出可用的测试?

    如何列出所有发现的测试 我发现这个命令 python3 4 m unittest discover s 但这并不完全是我想要的 因为上面的命令执行测试 我的意思是让我们有一个包含大量测试的项目 执行时间为几分钟 这迫使我必须等到测试完成 我
  • asp.net mvc从视图修改主文件

    我需要从视图文件 aspx 将类属性添加到正文标记 但该标记位于主文件中 如何从视图访问 body 标签 在你的视图输出中你可以添加一个jQuery http api jquery com addClass 执行此操作的客户端脚本将在页面拼
  • 将货币价值存储为美分/小单位有哪些缺点?

    我注意到一些金融 api 例如用于信用卡处理的 stripe api 要求将金额以美分形式传递 这似乎是一个很好的简化 这让我想知道为什么我不在我当前的应用程序中的所有地方都这样做在我的 Java 代码中使用数据库 NUMERIC 无限长度
  • 停止 shell 通配符扩展?

    有没有办法让编译后的命令行程序告诉 bash 或 csh 它不希望在其参数中扩展任何通配符 例如 人们可能需要一个 shell 命令 例如 foo 简单地返回该字符的 ASCII 数字值 不会 扩展发生在命令实际运行之前 您只能在运行命令之
  • 如何在报告中插入两页

    我面临一个问题 还有两个问题jrmxl文件 我想加入其中pdf文件 但每个都在一页中 我看到了下面的一些提示 但我不知道它们是否是最好的 因为我的第一个文件有 3 个频段 title detail and summary 第二个有detai
  • 如何获取 UITableView 标签文本字符串 - 自定义单元格

    我有一个带有自定义单元格的 UITableView 自定义单元格包含 UILabel 和 UIImageView 我在网上看到 当用户按下单元格时 可以从普通的 UITableView 单元格获取文本并将其存储在字符串中 但是 当您使用自定
  • 如何从不同的范围创建对象

    我在 Guice 中有一个范围单例的对象 在方法中f 我想创建一个新对象 但让 Guice 进行注入 我认为传递注射器并不是一个好的做法 那么我怎样才能获得一个新的 Guicy 对象实例呢 正如上面所建议的 提供商可能是做到这一点的方法 这
  • 功能检测自动播放 HTML5 音频 - 移动浏览器上的音频

    因此 我有一个网站 用户希望演示服务器端脚本生成的音频输出 他们选择一些选项并点击创建按钮 然后我在 HTML5 音频元素中进行 AJAX 并将 autoplay 属性设置为 true 这在桌面上效果很好 但在移动设备上效果不佳 到目前为止