跳转到内容

Generic Sensor API 浏览器支持

发布于

Generic Sensor API —— 根据 MDN,Sensor APIs 是“一组按统一设计构建的接口,以一致的 方式把设备传感器暴露给 Web 平台”。开发者使用 Accelerometer、Gyroscope、 Magnetometer、AmbientLightSensor 等具体子类,而不是直接使用基类 Sensor。

各传感器接口的支持情况并不相同,下表以 Accelerometer 作为代表性实现:

  • 图例
  • 支持
  • 部分支持
  • 需开启标志
  • 不支持
  • 未知
浏览器 / 平台支持版本置信度来源备注
Chrome (Desktop)支持67高来源—
Chrome (Android)支持67高来源1
Edge (Desktop)支持79高来源2
Firefox (Desktop)不支持—高来源3
Firefox (Android)不支持—高来源45
Safari (macOS)不支持—高来源6
Safari (iOS)不支持—高来源78
Samsung Internet支持9.0高来源9
WebView (Android)支持67高来源10
  1. 由 browser-compat-data 镜像自 Chrome 的数据推导。
  2. 由 browser-compat-data 镜像自 Chrome 的数据推导。
  3. browser-compat-data 未记录 Firefox 的支持。
  4. browser-compat-data 未记录 Firefox for Android 的支持。
  5. 由 browser-compat-data 镜像自 Firefox 的数据推导。
  6. browser-compat-data 未记录 Safari 的支持。
  7. browser-compat-data 未记录 iOS 版 Safari 的支持。
  8. 由 browser-compat-data 镜像自 Safari 的数据推导。
  9. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
  10. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。

源数据: /compatibility/sensors.json · 全球使用占比: 72 % (StatCounter 2026-05)

来源: 规范 · MDN · 最近核验 2026-10-03 · 置信度: 高 (由来源计算)

根据 MDN browser-compat-data,Gyroscope 与 Accelerometer 一致;而 Magnetometer 与 AmbientLightSensor 在 Chromium 中只有开启 #enable-experimental-web-platform-features 标志后才可用——请对实际使用的接口做特性 检测,不要用一个笼统的结论代替。

构造传感器时可传入可选的 frequency,随后启动;读数通过 reading 事件送达:

const acl = new Accelerometer({ frequency: 60 });
acl.addEventListener('reading', () => {
console.log(`Acceleration along the X-axis ${acl.x}`);
});
acl.start();

根据 MDN,使用传感器还需要用户通过 Permissions API 授权(权限名称因传感器而异, 例如 'accelerometer'、'magnetometer'、'ambient-light-sensor'),并且该功能 “仅在安全上下文(HTTPS)中可用”。

先检测 window 上是否存在具体接口,缺失时返回明确的回退结果,而不是让构造函数抛错:

function startAccelerometer(onReading) {
if (!('Accelerometer' in window)) {
// 回退:此处未暴露该接口,因此没有依赖运动的界面——
// 调用方保持静态布局。
return null;
}
try {
const sensor = new Accelerometer({ frequency: 60 });
sensor.addEventListener('error', (event) => {
console.error(`Sensor error: ${event.error.name}`);
});
sensor.addEventListener('reading', () => onReading(sensor));
sensor.start();
return sensor;
} catch (error) {
// 根据 MDN,当服务端设置的 Permissions Policy 阻止该功能时,
// Accelerometer() 构造函数会抛出 SecurityError。
console.error(`Could not start sensor: ${error.name}`);
return null;
}
}
  • 根据 MDN,Accelerometer 接口“仅在安全上下文(HTTPS)中可用”。
  • 对具体接口做特性检测('Accelerometer' in window 等)——根据 MDN browser-compat-data,Accelerometer / Gyroscope 与 Magnetometer / AmbientLightSensor 在 Chromium 中的标志要求并不相同。
  • 处理传感器的 error 事件——根据 MDN,事件触发后传感器会“进入空闲并停止读取数值”, 直到重新启动。
  • 构造函数抛出 SecurityError 意味着 Permissions Policy 正在阻止该功能, 这是 MDN 为 Accelerometer() 记录的异常。
  • 根据 MDN browser-compat-data,Firefox 与 Safari 均未实现这些接口, 因此请设计真正可用的回退路径,而不是留下一个无效功能。

完整参考(权限名称、错误处理、各传感器差异)见 Generic Sensor API。

另见 Geolocation——本浏览器中的另一项设备能力条目。

← 返回兼容性浏览器。