自定义HTML5地理位置提示框

5
当我在测试我的项目的HTML5功能之一 - 地理定位时,我发现用户可以关闭提示而不允许或拒绝它,这就打败了提示的全部目的。由于在我的项目中,我想根据用户的位置动态向用户显示数据,因此这无法实现,仅仅是因为不知道用户的响应,它不会触发任何两个回调函数 - 成功/错误。所以我开始搜索看是否有任何解决方案,对此有很多建议是设置超时,我尝试过,一切都运行得很完美。然而,这里有一个小缺陷,当它到达超时到期时间时,所有数据已经显示出来,我是指每件事情,因为没有检测到位置。所以我想出了两种可能有效的解决方案:1)创建一个自定义地理位置提示,强制用户允许/拒绝共享位置,并将响应传递给浏览器以设置位置首选项2)暂停页面加载(停止呈现内容),并等待到达超时到期时间或从用户那里获得响应。有人有任何想法如何实现这两个解决方案吗?PS:如果这对你来说不清楚,对不起,我知道我的英语很烂,但我可以详细说明。谢谢大家!

你是如何加载数据的?是直接在页面源代码中加载还是通过ajax拉取? - Torsten Walter
目前它在页面源代码中,但我认为如果通过ajax获取模板和数据会更可行。 - lpaxionj
我怀疑你能做到那种事。如果允许使用自定义对话框,很容易欺骗用户允许 Web 应用程序访问他们的位置。 - steveax
@lpaxionj 我理解你的痛苦 ;) 我们有同样的问题。你无法确定用户是否拒绝访问。你只能等待错误回调并相应地处理它。 - Torsten Walter
@Torsten Walter,是的,不幸的是我不得不创建一个自定义框,它不能被解除并强制用户选择允许/拒绝,如果获得了权限,则使用 IP 检测 :) - lpaxionj
@steveax:是的,你们说得对,那时我完全忘记了。 - lpaxionj
1个回答

4
如果您的项目是基于浏览器的,那么不应使用自定义地理位置提示,因为恶意开发人员可能使用该方法来欺骗用户。此外,由于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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接