自定义 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 栏
vue 里怎么使用 echarts 实现地图自动轮播功能自定义 tooltip 悬浮位置提示自定义 label 标签位置样式?