我正在寻找一种方法来检测Chrome的当前选项卡是否正在播放声音。我想强调的是,上下文是Web应用程序,而不是Chrome扩展或单个音频元素。我的假设是浏览器通过在选项卡标题中显示一个可听的图标来“知道”该选项卡正在播放声音,因此我猜测有一些浏览器HTML5 API可以做到这一点。
我正在寻找一种方法来检测Chrome的当前选项卡是否正在播放声音。我想强调的是,上下文是Web应用程序,而不是Chrome扩展或单个音频元素。我的假设是浏览器通过在选项卡标题中显示一个可听的图标来“知道”该选项卡正在播放声音,因此我猜测有一些浏览器HTML5 API可以做到这一点。
简短回答:不行
详细回答:
在这种情况下,可能有一些可行的方法。Chrome浏览器有一个仅供开发人员使用的API,用于连接音频设备,但无法在实际环境中使用。 (来源)
提供chrome.audio API以允许用户获取有关系统上连接的音频设备的信息并对其进行控制。目前仅为ChromeOS实现此API。
Jared Sohn提供了一个有趣的解决方案,即插件(也应该适用于Web)扫描正在播放音频的网页。您可以为您的网页重写类似的代码(通过抓取所有可能的音频源并逐个检查它们)。 (来源)
也许最接近的方法是类似于MuteTab Chrome扩展程序所做的事情(由我编写, http://www.github.com/jaredsohn/mutetab),基本上扫描页面以查找对象、嵌入、音频、视频和applet标签,并将它们从页面中隐藏。不幸的是,这会错过Web音频。
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));
- Motinvideo
元素静音,那么这个答案就不起作用。 - aikind