为什么地理定位在移动浏览器上不起作用?
Why does geolocation not work on mobile browsers?
我正在尝试通过 HTML5 geolocation
获取用户的位置。
在台式机上它运行良好,但在我所有的移动设备(Samsung note、Samsung galaxy S4 和 Iphone 6)上它不工作并且不显示 error
对象。
这是我的代码:
function showPosition(position) {
var coor = position.coords.longitude+", "+position.coords.latitude;
alert(coor);
}
function errorPosition(error) {
alert(error);
}
function toggleGeolocation() {
navigator.geolocation.watchPosition(showPosition,errorPosition);
}
它要求获得地理定位许可,我单击允许(gps 正在工作)。可能是什么问题?
我在所有设备上使用 Google Chrome。
尝试使用此代码,它应该可以工作。
var successHandler = function(position) {
alert(position.coords.latitude);
alert(position.coords.longitude);
};
var errorHandler = function (errorObj) {
alert(errorObj.code + ": " + errorObj.message);
alert("something wrong take this lat " + 26.0546106 );
alert("something wrong take this lng " +-98.3939791);
};
navigator.geolocation.getCurrentPosition(
successHandler, errorHandler,
{enableHighAccuracy: true, maximumAge: 10000});
Navigator 仅适用于 Android https 网站。
这是一个示例,如果使用 http 则不会显示错误,但可以在 https 上正常工作(来自 https://www.w3schools.com/HTML/tryit.asp?filename=tryhtml5_geolocation)
<!DOCTYPE html>
<html>
<body>
<p>Click the button to get your coordinates.</p>
<button onclick="getLocation()">Try It</button>
<p id="demo"></p>
<script>
var x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition(position) {
x.innerHTML = "Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
}
</script>
</body>
</html>
嗨@jordan,我面临着与我所做的相同的事情
首先确保您已更新设备上的 chrome 浏览器。
已启动第一个移动设备的定位服务
在加载时调用了 getLocation() 函数
通过这样做,它询问了我的许可并且效果很好。
// google geolocation
googleMap: function(func){
if (navigator.geolocation) {
//get location
navigator.geolocation.getCurrentPosition(function(position) {
var coords = position.coords;
lat = coords.latitude;
lng = coords.longitude;
var latlng = new google.maps.LatLng(lat, lng);
var geocoder = new google.maps.Geocoder();
geocoder.geocode( {'location': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var time = Date.parse(new Date());
var resultArr = results[0].address_components, address = "" ,LocationName = "",province = "",city = "",district = "";
for (var i = 0; i < resultArr.length; i++) {
var type = resultArr[i].types[0] ? resultArr[i].types[0] : 0;
if (type && type == "street_number") {
LocationName = resultArr[i].short_name;
}
if (type && type == "route") {
address = address + resultArr[i].short_name;
}
if (type && type == "political") {
district = resultArr[i].short_name;
}
if (type && type == "locality") {
city = resultArr[i].short_name;
}
if (type && type == "administrative_area_level_1") {
province = resultArr[i].short_name;
}
}
var data = {'name': LocationName + ' ' + address, 'address': address, 'lng': lng, 'lat': lat, 'province': province, 'city': city, 'district': district};
func(data);
} else {
func();
alert('Geocode was not successful for the following reason: ' + status);
}
});
}, function getError(error){
func();
switch(error.code){
case error.TIMEOUT:
alert(langData['siteConfig'][22][100]);
break;
case error.PERMISSION_DENIED:
alert(langData['siteConfig'][22][101]);
break;
case error.POSITION_UNAVAILABLE:
alert(langData['siteConfig'][22][102]);
break;
default:
break;
}
})
}else {
func();
alert(langData['waimai'][3][72])
}
},
h5: function(func){
if (navigator.geolocation) {
if ("function" == typeof func) {
h5LocationInit.fn = func
}
window.touchH5LocationCallback = function(f, g) {
if(f == null){
HN_Location.getLocationByGeocoding(g);
}else{
// getLocationError(f);
HN_Location.init(func, true);
}
$("#touchH5LocationIframe").remove();
},
$('<iframe src="javascript:(function(){ window.navigator.geolocation.getCurrentPosition(function(position){parent && parent.touchH5LocationCallback && parent.touchH5LocationCallback(null,position);}, function(err){parent && parent.touchH5LocationCallback && parent.touchH5LocationCallback(err);}, {enableHighAccuracy: 1, maximumAge: 10000, timeout: 5000});})()" style="display:none;" id="touchH5LocationIframe" ></iframe>').appendTo("body")
} else {
// var r = {
// tips: "broswer not supported"
// };
// "function" == typeof func ? func(r) : "[object Object]" === Object.prototype.toString.call(func) && func.fn && func.fn(r)
HN_Location.init(func, true);
}
},
我完全同意你的情况。很难找到答案...
我正在尝试通过 HTML5 geolocation
获取用户的位置。
在台式机上它运行良好,但在我所有的移动设备(Samsung note、Samsung galaxy S4 和 Iphone 6)上它不工作并且不显示 error
对象。
这是我的代码:
function showPosition(position) {
var coor = position.coords.longitude+", "+position.coords.latitude;
alert(coor);
}
function errorPosition(error) {
alert(error);
}
function toggleGeolocation() {
navigator.geolocation.watchPosition(showPosition,errorPosition);
}
它要求获得地理定位许可,我单击允许(gps 正在工作)。可能是什么问题?
我在所有设备上使用 Google Chrome。
尝试使用此代码,它应该可以工作。
var successHandler = function(position) {
alert(position.coords.latitude);
alert(position.coords.longitude);
};
var errorHandler = function (errorObj) {
alert(errorObj.code + ": " + errorObj.message);
alert("something wrong take this lat " + 26.0546106 );
alert("something wrong take this lng " +-98.3939791);
};
navigator.geolocation.getCurrentPosition(
successHandler, errorHandler,
{enableHighAccuracy: true, maximumAge: 10000});
Navigator 仅适用于 Android https 网站。 这是一个示例,如果使用 http 则不会显示错误,但可以在 https 上正常工作(来自 https://www.w3schools.com/HTML/tryit.asp?filename=tryhtml5_geolocation)
<!DOCTYPE html>
<html>
<body>
<p>Click the button to get your coordinates.</p>
<button onclick="getLocation()">Try It</button>
<p id="demo"></p>
<script>
var x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition(position) {
x.innerHTML = "Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
}
</script>
</body>
</html>
嗨@jordan,我面临着与我所做的相同的事情
首先确保您已更新设备上的 chrome 浏览器。
已启动第一个移动设备的定位服务
在加载时调用了 getLocation() 函数
通过这样做,它询问了我的许可并且效果很好。
// google geolocation
googleMap: function(func){
if (navigator.geolocation) {
//get location
navigator.geolocation.getCurrentPosition(function(position) {
var coords = position.coords;
lat = coords.latitude;
lng = coords.longitude;
var latlng = new google.maps.LatLng(lat, lng);
var geocoder = new google.maps.Geocoder();
geocoder.geocode( {'location': latlng}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var time = Date.parse(new Date());
var resultArr = results[0].address_components, address = "" ,LocationName = "",province = "",city = "",district = "";
for (var i = 0; i < resultArr.length; i++) {
var type = resultArr[i].types[0] ? resultArr[i].types[0] : 0;
if (type && type == "street_number") {
LocationName = resultArr[i].short_name;
}
if (type && type == "route") {
address = address + resultArr[i].short_name;
}
if (type && type == "political") {
district = resultArr[i].short_name;
}
if (type && type == "locality") {
city = resultArr[i].short_name;
}
if (type && type == "administrative_area_level_1") {
province = resultArr[i].short_name;
}
}
var data = {'name': LocationName + ' ' + address, 'address': address, 'lng': lng, 'lat': lat, 'province': province, 'city': city, 'district': district};
func(data);
} else {
func();
alert('Geocode was not successful for the following reason: ' + status);
}
});
}, function getError(error){
func();
switch(error.code){
case error.TIMEOUT:
alert(langData['siteConfig'][22][100]);
break;
case error.PERMISSION_DENIED:
alert(langData['siteConfig'][22][101]);
break;
case error.POSITION_UNAVAILABLE:
alert(langData['siteConfig'][22][102]);
break;
default:
break;
}
})
}else {
func();
alert(langData['waimai'][3][72])
}
},
h5: function(func){
if (navigator.geolocation) {
if ("function" == typeof func) {
h5LocationInit.fn = func
}
window.touchH5LocationCallback = function(f, g) {
if(f == null){
HN_Location.getLocationByGeocoding(g);
}else{
// getLocationError(f);
HN_Location.init(func, true);
}
$("#touchH5LocationIframe").remove();
},
$('<iframe src="javascript:(function(){ window.navigator.geolocation.getCurrentPosition(function(position){parent && parent.touchH5LocationCallback && parent.touchH5LocationCallback(null,position);}, function(err){parent && parent.touchH5LocationCallback && parent.touchH5LocationCallback(err);}, {enableHighAccuracy: 1, maximumAge: 10000, timeout: 5000});})()" style="display:none;" id="touchH5LocationIframe" ></iframe>').appendTo("body")
} else {
// var r = {
// tips: "broswer not supported"
// };
// "function" == typeof func ? func(r) : "[object Object]" === Object.prototype.toString.call(func) && func.fn && func.fn(r)
HN_Location.init(func, true);
}
},
我完全同意你的情况。很难找到答案...