谷歌浏览器v74的设备事件返回undefined。

5

我试图使用设备事件,例如DeviceMotionEvent和DeviceOrientationEvent,但是当我尝试调试为什么它在我的更新设备上的Chrome 74上无法工作时,结果发现上述事件未被读取,输出是未定义而不是一个函数。


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

9
使用HTTPS。我遇到了同样的问题,在进行一些测试后发现,这已经从http中删除,但仍然适用于通过https加载的站点。
可能与关于隐私问题的此问题即将推出的API有关。
iOS / Safari在其最新更新中也做了同样的事情,并且还添加了一个默认关闭的设置。
我无法在更改列表或任何公共官方更改日志中找到它的提及。 此博客文章似乎表明,使用localhost访问网站也可以(http访问的白名单域)-但是,如果您正在使用实际设备进行测试,则不太可能在设备本身上运行服务器,因此您必须以某种方式将您的localhost请求路由到您的服务器IP(据我所知,这只能在您的手机被root的情况下完成)。

由于通用传感器API是一个强大的功能,Chrome仅允许在安全上下文中使用。在实践中,这意味着要使用通用传感器API,您将需要通过HTTPS访问您的页面。在开发过程中,您可以通过http://localhost这样做,但是对于生产环境,您将需要在服务器上使用HTTPS。请参阅安全性与HTTPS文章以获取最佳实践和指南。


我在我们的 HTTPS 演示网站上尝试了你的解决方案,它起作用了!谢谢! - virtualbjorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接