Javascript 仅请求地理位置信息以响应用户手势?

Javascript 仅请求地理位置信息以响应用户手势?,javascript,google-chrome-devtools,user-experience,Javascript,Google Chrome Devtools,User Experience,我刚刚更新到Chrome 64,并开始在我们的Web应用程序中注意到这条消息: [Violation] Only request geolocation information in response to a user gesture. 这似乎过于严格。在谷歌地图中导航时,我不必反复单击“更新位置”。什么是位置轮询的替代方案 我们目前正在使用以下代码: let locInt = self.setInterval(function(){ navigator.geolocation.ge

我刚刚更新到Chrome 64,并开始在我们的Web应用程序中注意到这条消息:

[Violation] Only request geolocation information in response to a user gesture.
这似乎过于严格。在谷歌地图中导航时,我不必反复单击“更新位置”。什么是位置轮询的替代方案

我们目前正在使用以下代码:

let locInt = self.setInterval(function(){
    navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);
},5000);
我们的应用程序基于位置,并且依赖于不断更新的位置。这里的首选方法是什么?

通过
watchPosition()
方法,您可以注册一个处理程序,每当设备位置发生变化时,浏览器都会自动调用该处理程序。这比投票更可取

id = navigator.geolocation.watchPosition(success[, error[, options]])

似乎有一个来自谷歌而非的方法在页面加载中加载地理位置:

用户对自动请求页面加载位置的页面不信任或感到困惑。不要在页面加载时自动请求用户的位置,而是将请求与用户的手势联系起来,例如点击“查找我附近的商店”按钮。确保手势清楚明确地表达了对用户位置的需求

如果您使用
watchPosition()
getCurrentPosition()
,这并不重要:

Lighthouse收集页面加载时执行的JavaScript。如果此代码包含对geolocation.getCurrentPosition()或geolocation.watchPosition()的调用,并且尚未授予geolocation权限,则会请求用户的位置


我们还注意到,自从Chrome更新后,获取用户地理位置的过程中出现了巨大的延迟。

我发现解决方案有点像!这个问题的存在是因为“HTTP”。如果您想使用诸如“地理位置”之类的javascript API,您的服务器或本地服务器必须是HTTPS协议而不是HTTP

作为一个数据点,我刚刚打开了谷歌地图,我没有看到这种违规行为。所以看起来他们不是在轮询位置。使用而不是轮询怎么样?谷歌对不信任后台同步和信标的用户有何建议?为什么本地应用程序可以通过清单请求权限,而Web应用程序不能?如果给定的用户操作(单击)需要多个权限,比如地理定位和地理围栏通知,该怎么办?@,3、4个弹出式权限请求?如果在没有活动客户端的情况下需要获得后台服务人员的权限,该怎么办?对不对,这似乎只是一个[违规]日志,但您应该在任何更新时打开一个问题?我在Mac.Sry上的最新Chrome中看到了这一点,但这与watchPosition()无关。看到我的答案了吗?我正在使用
监视位置
,我仍然看到这个
违规
:s很好的提示,很可能是我发布此消息时遇到的情况。据我所知,此违规警告与https无关。当使用http en geolocation时,它将触发错误“geolocation.js:160[Deprecation]getCurrentPosition()和watchPosition()不再适用于不安全的源站。”并且geolocation确实不起作用:-(