javascript - Google Chrome v74 的设备事件返回未定义
问题描述
我正在尝试使用设备事件,例如 DeviceMotionEvent 和 DeviceOrientationEvent,但是当我尝试调试为什么它不能在我的 chrome 74 更新的设备上工作时,结果发现上述事件没有被读取,并且输出未定义而不是函数。
window.addEventListener('devicemotion', function (evt) {
console.log(evt);
});
window.addEventListener('deviceorientation', function (evt) {
console.log(evt);
});
解决方案
使用 HTTPS。我遇到了同样的问题,经过一些测试发现这已从 http 中删除,但仍可用于通过 https 加载的站点。
iOS/Safari 在上次更新中做了同样的事情,此外还添加了一个默认关闭的设置。
不过,我在更改列表或任何官方更改日志中的任何地方都找不到它。
这篇博客文章似乎表明使用访问该站点localhost
也可以工作(用于 http 访问的白名单域) - 但是,如果您使用实际设备进行测试,您不太可能在设备本身上运行您的服务器,因此您将不得不以某种方式将您的请求路由localhost
到您的服务器 ip(据我所知,这只有在您的手机已植根时才能完成)。
由于通用传感器 API 是一项强大的功能,Chrome 仅允许在安全上下文中使用它。实际上,这意味着要使用通用传感器 API,您需要通过 HTTPS 访问您的页面。在开发期间,您可以通过http://localhost执行此操作,但对于生产,您需要在服务器上安装 HTTPS。有关最佳实践和指南,请参阅使用 HTTPS 的安全性文章。
推荐阅读
- tensorflow - Tensorflow 2 中的验证损失
- json - 使用表单参数而不是 application/json 上传 json 文件有效负载时,将 application/octet-stream 设置为 mediaType
- heroku - 在heroku崩溃时部署
- subdomain - 让 netlify 使用也在不同站点上使用的子域
- jq - 如何将内部对象中的键与其父对象合并(取消嵌套)
- url-rewriting - 将内部 SharePoint 网站移动到 Office 365 后如何进行 URL 重写
- jira - 在 Jira 时间跟踪中限制每周最大小时数
- powershell - Powershell:无法将“System.Object[]”转换为参数“Name”所需的类型“System.String”。不支持指定的方法
- azure - Azure 专用终结点:禁用 RDP,设置 TLS 版本?
- microsoft-graph-api - MS Teams 在线会议 - 电子邮件通知