我遇到了GeoLocation API的问题。基本上我试图根据用户的位置链接到谷歌地图(不嵌入)。如果无法使用地理位置,则默认只显示目的地。我遇到的问题是,除非我在代码中添加警报,否则它将始终默认为目标。
这是我的代码:
function findPosition(position)
{
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
mapURL = "https://maps.google.co.uk/maps?saddr=" + latitude + "," + longitude + "&daddr=50.795251,-1.107136&sensor=TRUE";
alert("1 " + mapURL); // Alert shows the URL correctly
}
if(navigator.geolocation)
{
navigator.geolocation.getCurrentPosition(findPosition);
}
alert("2 " + mapURL); // Shows empty string as if findPosition() has not been called???
alert("3 " + mapURL); // Shows mapURL correctly
if (mapURL == "")
{
// Set the default URL with only the destination
mapURL = "https://maps.google.co.uk/maps?q=50.795251,-1.107136";
}
var link = "<a href=\"" + mapURL + "\" style=\"text-decoration:none;color:#000;\" target=\"_blank\">";
document.write(link);
//-->
</script>
警报旁边的注释是为了演示代码如何与它们一起使用,但是如果警报被删除,它总是设置目标唯一的默认URL。
我不明白为什么警报1显示正确的网址但是2什么都没有显示,尽管它应该在警报1之后处理?
任何帮助都将不胜感激。
答案 0 :(得分:1)
这是因为navigator.geolocation.getCurrentPosition
是异步的,所以一个解决方案就是将回调传递给它,就像你所做的那样,当找到位置时(或者当它发出错误时)将调用它。
您使用alert
看到了正确的结果,因为您正在给脚本留出时间来识别位置。
一种解决方案可能是在navigator.geolocation.getCurrentPosition
回调中移动您的代码,您调用findPosition
,如下所示:
function findPosition(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
mapURL = "https://maps.google.co.uk/maps?saddr=" + latitude + "," + longitude + "&daddr=50.795251,-1.107136&sensor=TRUE";
if (mapURL == "") {
// Set the default URL with only the destination
mapURL = "https://maps.google.co.uk/maps?q=50.795251,-1.107136";
}
var link = "<a href=\"" + mapURL + "\" style=\"text-decoration:none;color:#000;\" target=\"_blank\">";
document.write(link);
}
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(findPosition);
}