首先,我知道此post存在。我需要一个免费的(或非常便宜的)解决方案,所以我再次问这个问题。


  在不安全的来源上不赞成使用getCurrentPosition()和watchPosition()。要使用此功能,应考虑将应用程序切换到安全来源,例如HTTPS。


Chrome浏览器不允许未使用SSL的网站使用getCurrentPosition()。

Google Maps API可以解决此问题,但其usage limits太低了。 (我们管理的新闻门户每天的页面浏览量超过40万)。

有谁知道getCurrentPosition()的任何免费(或非常便宜)的替代品吗?

最佳答案

您可以为此使用https://ipinfo.io API(这是我的服务)。它是免费的,每天最多提供1,000个请求(带有或不带有SSL支持)。它为您提供坐标,名称等。这是一个例子:

curl ipinfo.io
{
  "ip": "172.56.39.47",
  "hostname": "No Hostname",
  "city": "Oakland",
  "region": "California",
  "country": "US",
  "loc": "37.7350,-122.2088",
  "org": "AS21928 T-Mobile USA, Inc.",
  "postal": "94621"
}


这是一个示例,该示例使用与您从getCurrentPosition()获得的内容相匹配的API响应构造一个coords对象:

$.getJSON('https://ipinfo.io/geo', function(response) {
    var loc = response.loc.split(',');
    var coords = {
        latitude: loc[0],
        longitude: loc[1]
    };
});


这是一个详细的示例,显示了如何将其用作getCurrentPosition()的后备:

function do_something(coords) {
    // Do something with the coords here
}

navigator.geolocation.getCurrentPosition(function(position) {
    do_something(position.coords);
    },
    function(failure) {
        $.getJSON('https://ipinfo.io/geo', function(response) {
        var loc = response.loc.split(',');
        var coords = {
            latitude: loc[0],
            longitude: loc[1]
        };
        do_something(coords);
        });
    };
});

关于javascript - 没有SSL的网站的getCurrentPosition()的免费替代品?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38909338/

10-11 01:44