【问题标题】:How to call function when user Allows or Denies access to "Physical Location"?当用户允许或拒绝访问“物理位置”时如何调用函数?
【发布时间】:2011-11-19 18:33:00
【问题描述】:

我的应用程序由 jQuery mobile 提供支持并使用地理定位。

在我的应用程序尝试获取用户的位置后,(Chrome)浏览器会提示用户:

Example.com 想要跟踪您的实际位置 [允许] [拒绝]

我的目标是:

  1. 如果用户单击“允许”,则调用函数 1(使用位置 按应用)。
  2. 如果用户点击“拒绝”,则调用函数2(地址形式 出现)。

如何将函数绑定到用户单击“允许”或“拒绝”按钮时发生的事件(如果有)?

【问题讨论】:

  • 您可能无法将任何内容绑定到这些按钮,但是当您单击“拒绝”时,您调用的函数返回什么?
  • 当“拒绝”被点击时,用户被转到一个页面,他们应该在其中填写他们的地址。然后将该地址发送到返回地理位置的 Web 服务。

标签: javascript jquery-mobile geolocation jquery-events


【解决方案1】:

getCurrentPosition 函数接受两个函数参数。哎呀,第一个在您允许时执行,另一个在您拒绝时执行!

Documentation

http://jsfiddle.net/pimvdb/QbRHg/

navigator.geolocation.getCurrentPosition(function(position) {
    alert('allow');
}, function() {
    alert('deny');
});

【讨论】:

  • 当用户简单地关闭对话框或选择“not now”(在 Firefox 中)而不是单击“deny”时,是否会触发事件?
  • 这并不完全有效。我希望它做到了。在事件或此示例中的警报触发之前,我得到了几秒钟的空白。因此,用户在几秒钟内没有任何反馈,这很糟糕......
  • 关闭弹出窗口时是否有任何事件?没有“允许”,没有“拒绝”,而是关闭了弹出窗口。
【解决方案2】:

Link to Docs

function handlePermission() { navigator.permissions.query({name:'geolocation'}).then(function(result) {
if (result.state == 'granted') {
  report(result.state);
  geoBtn.style.display = 'none';
} else if (result.state == 'prompt') {
  report(result.state);
  geoBtn.style.display = 'none';
  navigator.geolocation.getCurrentPosition(revealPosition,positionDenied,geoSettings);
} else if (result.state == 'denied') {
  report(result.state);
  geoBtn.style.display = 'inline';
}
result.onchange = function() {
  report(result.state);}});}function report(state) {
 console.log('Permission ' + state);}

我希望这行得通。

【讨论】:

  • 包含代码来源的链接会很有用:Permissions API
  • @jirarium 链接已添加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多