捕获 html5 地理定位事件
Posted
技术标签:
【中文标题】捕获 html5 地理定位事件【英文标题】:Catch html5 geolocation events 【发布时间】:2015-07-09 12:55:05 【问题描述】:有没有办法捕捉 html5 地理位置事件?
现在我正在使用 geolocator.js
我的问题是:
当消息弹出时,如果我想允许 html5 位置,如果我接受它需要 html5 位置,如果我得到 ipLocation。
但我想监听这些点击,所以如果用户在 10 秒内没有点击,我可以设置超时,它会自动获取 ip 位置。
有什么方法可以获取“接受”和“拒绝”的事件?这是我的代码 sn-p
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(geoSuccess, geoError, html5Options);
else // not supported
fallback(new Error('geolocation is not supported.'));
编辑:我在 iMac 上使用 Chrome
编辑2:
var html5Options = enableHighAccuracy: true,timeout: 10000, maximumAge: 0 ;
编辑 3:使用 kravitz 的解决方案
if (navigator.geolocation)
waitTooLong=setTimeout(geoError, 15000);
navigator.geolocation.getCurrentPosition(geoSuccess, geoError, html5Options);
else // not supported
fallback(new Error('geolocation is not supported.'));
function geoSuccess(position)
clearTimeout(waitTooLong);
//doing my locationstuff
function geoError(error)
//doing my locationstuff
clearTimeout(waitTooLong);
fallback(error);
【问题讨论】:
那么你想知道用户什么时候点击了他们“接受”地理位置,如果他们没有点击“接受”你就照做吗? 不,如果他们使用接受我使用 html5 位置。否则我使用 IPLocation。 【参考方案1】:var geoError = function()
//get location failed so get manually by IP here
;
if (navigator.geolocation)
navigator.geolocation.getCurrentPosition(geoSuccess, geoError, html5Options);
else // not supported
fallback(new Error('geolocation is not supported.'));
以上应该可以,但如果你想确定:
var timeOut = setTimeout(geoError, 10000);
var geoSuccess = function()
clearTimeout(timeOut);
;
【讨论】:
这就是我现在正在做的事情,但他在超时后不使用geoError ..通常他会在10秒后使用ipLocation .. 但我想没有办法跟踪点击/也不用javascript关闭窗口 您是否尝试在 geoError 函数的开头放置一个 alert() 以查看它是否到达那里?尤其是从 setTimeout 调用无法访问 geoError 函数会很奇怪。 确保 geoError 和 geoSuccess 在使用它们或 setTimeout 之前/之上定义 是的,我尝试在 geoError 中使用 console.log,但什么都不做时它不会弹出。如果我拒绝它,它会完美运行。以上是关于捕获 html5 地理定位事件的主要内容,如果未能解决你的问题,请参考以下文章