javascript - 如果耳机刚拔出,如何在浏览器中检查?

标签 javascript events

<分区>

如果音频设备发生变化,我想暂停视频。例如如果耳机被拔掉。有这样的事件吗?

我经历了一些其他问题,但它们不适用于浏览器

  1. Detect if headphones are plugged in or not via C#
  2. Detecting when head phones are plugged in
  3. Android: Checking if headphones are plugged in

最佳答案

这并不完美,它可能有点老套,因为它依赖于浏览器公开 MediaDevicelabel 属性,然后尝试使用字符串 “head”猜测用户是否连接了耳机设备,但您也可以只观察连接的音频设备的数量,并在它发生变化时暂停或根据您的使用情况暂停。

几乎所有逻辑都改编自 navigator.mediaDevices.ondevicechange 的 MDN 页面.

注意:当从 file:// URL 执行时,此代码无法正常工作,必须通过 http:// 访问> 或 https:// 浏览器的 URL,以实际让您访问 MediaDevicelabel 属性。此外,根据您的浏览器,您可能需要使用 hack featured in the first iteration of this answer这将要求用户访问麦克风并授予您访问 label 属性的权限。

// let's assume we don't have any headphones connected
let headphonesConnected = false;

const updateDevices = () => {
  navigator.mediaDevices.enumerateDevices()
    .then(function(devices) {
      // check to see if we have any device with "head" in its name connected
      // like "headset" or "headphones"
      headphonesConnected = devices
        .filter(device => /audio\w+/.test(device.kind))
        .find(device => device.label.toLowerCase().includes('head'))
      ;
    })
  ;
};

updateDevices();

// add an ondevicechange event listener so we can tell when
// an input device is connected and disconnected
navigator.mediaDevices.ondevicechange = updateDevices;

注意:这个新的、更简单的版本的测试一直不稳定,但它消除了麦克风访问要求。一些浏览器还需要比其他浏览器更长的时间来触发 ondevicechange 处理程序。

关于javascript - 如果耳机刚拔出,如何在浏览器中检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55073392/

相关文章:

java - 如何实现javafx鼠标事件 "push and hold"?

c# - 触发一个事件而不订阅它

c# - 添加和删​​除匿名事件处理程序

javascript - Angular 中的多层嵌套组件

javascript - 是否可以向 chart.js 折线图添加阴影?

javascript - 使用 printjs 的语义 ui 模态打印没有得到结果

events - 与传统 FRP 框架相比,Netwire 中的事件处理

javascript - 让脚本在没有 .text 的情况下工作

javascript - 你如何在 Rails html.erb 文件中的 ruby​​ if/else 循环中执行一些 jQuery?

c# - 从 C# 中的不同类引发类的事件