我正在尝试在navigator.geolocation.getCurrentPosition的回调中的新浏览器窗口中打开Google地图。
问题是浏览器将新窗口作为弹出窗口打开,因为调用是异步的。在大多数浏览器中,询问用户是否要允许弹出窗口。但是,某些浏览器(尤其是移动浏览器)不会显示此消息。取而代之的是,它们只是阻止了弹出窗口,对于用户而言,似乎什么也没有发生。
我尝试的第一种方法是(缩短版本,不进行错误处理等):
$("#getGoogleDirection").on("click",function(e){ navigator.geolocation.getCurrentPosition(openMap); }); function openMap(position){ var userLat = position.coords.latitude; var userLng = position.coords.longitude; var destinationLat = ""; var destinationLng = ""; window.open("https://www.google.com/maps/dir/"+userLat+","+userLng+"/"+destinationLat+","+destinationLng+"/"); }
如果浏览器询问用户是否要打开弹出窗口,则此方法有效。但是,如前所述,某些浏览器不询问用户,而只是阻止弹出窗口。
所以我尝试了另一个选择:
var newWindow; $("#getGoogleDirection").on("click",function(e){ navigator.geolocation.getCurrentPosition(openMap); newWindow = window.open('', '_blank'); newWindow.document.write('Loading route...'); }); function openMap(position){ var userLat = position.coords.latitude; var userLng = position.coords.longitude; var destinationLat = ""; var destinationLng = ""; newWindow.location.href = 'https://www.google.com/maps/dir/"+userLat+","+userLng+"/"+destinationLat+","+destinationLng+"/"'; }
这也有效。但是,问题在于浏览器打开了新窗口,但在旧窗口中打开了navigator.geolocation.getCurrentPosition的确认弹出框。因此,必须返回到旧窗口,按确认按钮,然后再返回新窗口。这对于用户来说不是很方便。
是否可以通过编程方式进行窗口切换?第二,可以同步制作navigator.geolocation.getCurrentPosition,以便我可以调用
window.open()
直接在$(“#getGoogleDirection”)的点击事件处理程序中,因为不会将其作为弹出窗口打开。
非常感谢!