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

Dev*_*ate 9 javascript user-experience google-chrome-devtools

我刚刚更新到Chrome 64,并开始在我们的网络应用中注意到此消息:

[Violation] Only request geolocation information in response to a user gesture.
Run Code Online (Sandbox Code Playgroud)

这似乎过于严格.当我在Google地图中导航时,我不必反复点击"更新位置".位置轮询的替代方案是什么?

我们目前使用以下代码:

let locInt = self.setInterval(function(){
    navigator.geolocation.getCurrentPosition(geoSuccess, geoError, geoOptions);
},5000);
Run Code Online (Sandbox Code Playgroud)

我们的应用程序是基于位置的,并依赖于不断更新的位置.这里的首选方法是什么?

Ste*_*han 16

似乎谷歌建议不要在页面加载时加载地理位置:

用户对在页面加载时自动请求其位置的页面不信任或混淆.不是在页面加载时自动请求用户的位置,而是将请求绑定到用户的手势,例如点击"查找我附近的商店"按钮.确保手势清楚明确地表达了对用户位置的需求.

如果您使用watchPosition()或者无关紧要getCurrentPosition():

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

我们还注意到,自Chrome更新以来,用户的地理位置出现了大幅延迟.

  • 对于不信任后台同步和信标的用户,Google 有什么建议?为什么允许本机应用程序通过清单请求权限,但 Web 应用程序不允许?如果给定的用户操作(点击)需要多个权限(例如 GeoFence 的地理位置和通知)怎么办?@、3、4 弹出权限请求?如果需要后台 Service Worker 的许可而没有活动客户端怎么办? (3认同)

Kay*_*ues 7

该watchPosition()方法使您可以注册一个处理程序,每次设备位置更改时,浏览器都会自动调用该处理程序。这比轮询更可取。

id = navigator.geolocation.watchPosition(success[, error[, options]])
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/zh-CN/docs/Web/API/Geolocation/watchPosition

  • 我正在使用“watchPosition”,但我仍然看到这个“违规”:s (4认同)
  • 对不起,但这与watchPosition()没有关系。见我的回答/sf/answers/3458420661/ (3认同)