自定义 HTML5 地理位置提示

Posted

技术标签:

【中文标题】自定义 HTML5 地理位置提示【英文标题】:Custom HTML5 Geolocation Prompt 【发布时间】:2012-08-02 23:41:13 【问题描述】:

在我测试 html5 功能之一 - 我的项目的地理位置时, 我意识到用户可以在不允许或拒绝的情况下关闭提示, 这违背了提示的全部目的。

而且因为在我的项目中我想根据用户的位置动态地向用户显示数据,所以这是无法做到的,仅仅是因为不知道用户的反应, 它不会触发任何两个回调 - 成功/错误。

所以我开始寻找是否有任何解决方案, 对此有很多建议是设置超时, 我试过了,一切都很完美。 然而,这里的一个小缺陷是,当它达到超时到期时, 所有数据都已显示,当我说全部时,我的意思是一切, 因为没有检测到位置。

所以我想出了两个可行的解决方案, 1) 创建一个自定义地理位置提示,强制用户允许/拒绝共享位置, 并将响应传递给浏览器以设置位置首选项 2)暂停页面加载(停止渲染内容)并等待它达到超时到期或得到用户的响应

有人知道如何实施这两种解决方案之一吗?

PS:对不起,如果你不清楚,我知道我的英语很烂,但我可以更详细地解释。

谢谢大家!

【问题讨论】:

如何加载数据?是在页面源中还是通过ajax拉进来的? 它目前在页面源中,但我认为如果它通过ajax拉取模板和数据会更容易实现。 我怀疑你能做到这一点。如果自定义对话框是可能的,那么诱使用户允许网络应用访问他们的位置将是微不足道的。 @lpaxionj 我理解你的痛苦;)我们有同样的问题。您无法真正确定用户是否不允许访问。您所能做的就是等待错误回调并进行相应处理。 @Torsten Walter,是的,不幸的是,我必须创建一个不可关闭的自定义框,并强制用户选择允许/拒绝,如果授予权限,则使用 ip 检测:( 【参考方案1】:

如果您的项目是基于浏览器的,则不应使用自定义地理位置提示,因为恶意开发人员可能会使用该方法来欺骗用户。此外,由于 Geolocation API 是一个异步事件,它会在等待时继续加载页面的其余部分。

我建议使用条件语句而不是 else 子句。这样,您的脚本函数应该只在共享位置后执行,并且您可以回退到如果没有提供地理位置信息会发生什么(我强烈建议您这样做,因为在没有提供数据的情况下会发生这种情况)。

使用JS检查地理位置信息的条件语句示例:

if (navigator.geolocation) 
    // code to run if there is geolocation information

else
// code to run if no geolocation info is given to the browser

【讨论】:

以上是关于自定义 HTML5 地理位置提示的主要内容,如果未能解决你的问题,请参考以下文章

在 html5 中自定义 navigator.geolocation 栏

帮助用户发现 HTML5 地理位置提示

编辑文本框中提示的自定义位置。

Ag-grid 自定义工具提示位置更改

自定义提示用户授权使用地理定位功能时的提示语

vue 里怎么使用 echarts 实现地图自动轮播功能自定义 tooltip 悬浮位置提示自定义 label 标签位置样式?