【发布时间】:2017-03-14 09:41:00
【问题描述】:
我正在寻找一种方法来检测 Chrome 的当前标签中是否正在播放声音。我想强调一下,上下文是一个网络应用程序,不是 chrome 扩展程序,也不是单个音频元素。我的假设是浏览器通过在选项卡标题中显示一个声音图标“知道”选项卡正在播放声音,所以我猜测有某种浏览器 HTML5 API。
【问题讨论】:
标签: javascript google-chrome audio html5-audio
我正在寻找一种方法来检测 Chrome 的当前标签中是否正在播放声音。我想强调一下,上下文是一个网络应用程序,不是 chrome 扩展程序,也不是单个音频元素。我的假设是浏览器通过在选项卡标题中显示一个声音图标“知道”选项卡正在播放声音,所以我猜测有某种浏览器 HTML5 API。
【问题讨论】:
标签: javascript google-chrome audio html5-audio
简单回答:否
长答案:
Some-what-ish 在这种情况下是最好的情况。 Chrome 的浏览器有一个仅用于开发的 API,它可以连接连接的音频设备,但不可能在真实环境中使用它。 (source)
提供 chrome.audio API 让用户获取信息 关于和控制连接到系统的音频设备。这个 API 目前仅针对 ChromeOS 实施。
Jared Sohn 还回答了一个有趣的解决方案,其原理是插件(也应该是 Web 可能的)扫描网页以查找播放音频的文件。您可以为您的网页重写类似的内容(通过获取所有可能的音频来源并单独检查它们)。 (source)
也许你能做的最接近的事情类似于 MuteTab Chrome 扩展确实(由我编写, http://www.github.com/jaredsohn/mutetab),它基本上是扫描 对象、嵌入、音频、视频和小程序标签的页面并隐藏它们 从页面。不幸的是,这错过了网络音频
【讨论】:
const mediaElementIsPlaying = (el) => { return el && el.currentTime > 0 && !el.paused && !el.ended && el.readyState > 2; } const audioIsPlaying = !![...document.getElementsByTagName('audio')].find((el) => mediaElementIsPlaying(el)); const videoIsPlaying = !![...document.getElementsByTagName('video')].find((el) => mediaElementIsPlaying(el));