MacOS环境下Chrome浏览器调用Ambient Light Sensor失败问题咨询
环境光传感器(ALS)NotReadableError 排查方案
问题说明
调试环境光传感器功能时用到的测试代码如下:
navigator.permissions.query({ name: 'ambient-light-sensor' }).then(result => { if (result.state === 'denied') { console.log('Permission to use ambient light sensor is denied.'); return; } const als = new AmbientLightSensor({frequency: 10}); als.addEventListener('activate', () => console.log('Ready to measure EV.')); als.addEventListener('error', event => console.log(`Error: ${event.error.name}`)); als.addEventListener('reading', () => { // Defaut ISO value. const ISO = 100; // Incident-light calibration constant. const C = 250; let EV = Math.round(Math.log2((als.illuminance * ISO) / C)); console.log(`Exposure Value (EV) is: ${EV}`); }); als.start(); });
运行后控制台仅返回Error: NotReadableError,运行环境为Chrome Canary v97、MacOS 10.15.7,可按照以下步骤逐一排查:
排查步骤
- 校验Chrome功能开关状态:在浏览器地址栏输入
chrome://flags,分别搜索#generic-sensor-extra-classes和#ambient-light-sensor两个配置项,确认都设置为Enabled状态,修改后重启浏览器生效。 - 确认页面访问协议符合要求:ALS属于高敏感传感器API,仅支持在
HTTPS协议站点或者localhost本地调试环境下运行,普通HTTP站点会直接触发读取失败。 - 校验MacOS系统权限配置:打开「系统偏好设置」-「安全性与隐私」-「隐私」-「传感器」,确认Chrome Canary已经获得传感器访问权限。注意:Chrome的
navigator.permissions接口仅校验浏览器侧的权限配置,不会同步系统级的授权状态,所以接口返回允许的情况下也可能因为系统未授权触发读取错误。 - 确认设备硬件支持:部分老旧Mac机型没有搭载环境光传感器,可通过「关于本机」-「系统报告」-「硬件」分类下查看是否存在光传感器相关硬件条目,无对应硬件的情况下无法调用该API。
- 降低采样频率测试:部分设备对高频采样支持度有限,可将
new AmbientLightSensor({frequency: 10})中的频率参数改为1,测试是否能正常读取数值。
内容的提问来源于stack exchange,提问作者CatwalkGhost
相关产品推荐
相关产品推荐

