首页 > 解决方案 > Google Chrome v74 的设备事件返回未定义

问题描述

我正在尝试使用设备事件,例如 DeviceMotionEvent 和 DeviceOrientationEvent,但是当我尝试调试为什么它不能在我的 chrome 74 更新的设备上工作时,结果发现上述事件没有被读取,并且输出未定义而不是函数。


window.addEventListener('devicemotion', function (evt) {
   console.log(evt);
});
window.addEventListener('deviceorientation', function (evt) {
   console.log(evt);
});

标签: javascriptgoogle-chromemobile

解决方案


使用 HTTPS。我遇到了同样的问题,经过一些测试发现这已从 http 中删除,但仍可用于通过 https 加载的站点。

可能与这个关于隐私问题和即将推出的 API的问题有关。

iOS/Safari 在上次更新中做了同样的事情,此外还添加了一个默认关闭的设置。

不过,我在更改列表或任何官方更改日志中的任何地方都找不到它。

这篇博客文章似乎表明使用访问该站点localhost也可以工作(用于 http 访问的白名单域) - 但是,如果您使用实际设备进行测试,您不太可能在设备本身上运行您的服务器,因此您将不得不以某种方式将您的请求路由localhost到您的服务器 ip(据我所知,这只有在您的手机已植根时才能完成)。

由于通用传感器 API 是一项强大的功能,Chrome 仅允许在安全上下文中使用它。实际上,这意味着要使用通用传感器 API,您需要通过 HTTPS 访问您的页面。在开发期间,您可以通过http://localhost执行此操作,但对于生产,您需要在服务器上安装 HTTPS。有关最佳实践和指南,请参阅使用 HTTPS 的安全性文章。


推荐阅读