getCurrentPosition () y watchPosition () están obsoletos en orígenes inseguros


Estoy recibiendo este error en mi sitio web que solicita datos de geolocalización del usuario:

GetCurrentPosition() y watchPosition() están obsoletos en orígenes inseguros, y el soporte se eliminará en el futuro. Debe considerar cambiar su aplicación a un origen seguro, como HTTPS. Véase goo.gl/rStTGz para más detalles.

Quiero decir que es básicamente solo un aviso, y el enlace de Google solo dice que está en desuso.

No tengo planes en mover mi sitio web a SSL... entonces, ¿hay una alternativa para alguien como yo?

Author: handle, 2015-08-20

9 answers

Encontré una respuesta probable en los mensajes de /jstillwell aquí: https://github.com/stefanocudini/leaflet-gps/issues/15 básicamente, esta característica no será compatible (solo en Chrome?) en el futuro, pero solo para sitios HTTP. HTTPS seguirá siendo aceptable, y no hay planes para crear un reemplazo equivalente para el uso HTTP.

 15
Author: kittimiyo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-20 17:37:20

Porque cambiar a HTTPS puede ser doloroso o imposible dependiendo de su arquitectura, Encontré una solución alternativa: puede usar la API de geolocalización de Google Maps. Aunque tiene límites de uso, hace el trabajo. Necesitarás una clave API del navegador, así que no olvides limitar su uso al nombre de host de tu página.

Lo uso como un método alternativo al método getCurrentPosition() si falla. Me permite hacer que funcione hasta que cambie a HTTPS.

Aquí está el JSFiddles:

  • HTTP: getCurrentPosition() fallará y volverá a la API
  • HTTPS: getCurrentPosition() tendrá éxito
 38
Author: gogson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-17 12:34:25

Sí. Google Chrome ha desaprobado la función en la versión 50. Si ha intentado usarlo en chrome el error es:

getCurrentPosition() and watchPosition() are deprecated on insecure origins. To use this feature, you should consider switching your application to a secure origin, such as HTTPS. See https://sites.google.com/a/chromium.org/dev/Home/chromium-security/deprecating-powerful-features-on-insecure-origins for more details.

Por lo tanto, usted tiene que agregar el certificado SSL. Bueno, esa es la única manera.

Y ahora es bastante fácil usar Let's Encrypt. Aquí está guía

Y para el propósito de la prueba usted podría intentar esto:

1.localhost se trata como un origen seguro a través de HTTP, por lo que si puede ejecutar su servidor desde localhost, debe ser capaz de probar la función en ese servidor.

2.Puede ejecutar chrome con el origin unsafely-treat-insecure-origin-as-secure="http://example.com" bandera (reemplazando "example.com" con el origen que realmente desea probar), que tratará ese origen como seguro para esta sesión. Tenga en cuenta que también necesita incluir --user-data-dir=/test/only/profile/dir para crear un nuevo perfil de prueba para que la bandera funcione.

Creo que Firefox también restringió el acceso del usuario a la geolocalización API requests from http. Aquí está el registro de cambios de webkit: https://trac.webkit.org/changeset/200686

 12
Author: Asim K T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-30 04:16:50

Podrías usar el https://ipinfo.io API para esto (es mi servicio). Es gratis por hasta 1,000 req / día (con o sin soporte SSL). Te da coordenadas, nombre y más. He aquí un ejemplo:

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"
}

Aquí hay un ejemplo que construye un objeto coords con la respuesta de la API que coincide con lo que obtienes de getCurrentPosition():

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

Y aquí hay un ejemplo detallado que muestra cómo puede usarlo como alternativa para 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);
        });  
    };
});

Véase http://ipinfo.io/developers/replacing-navigator-geolocation-getcurrentposition para más detalles.

 10
Author: Ben Dowling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-23 20:08:59

Puede ejecutar chrome con el origin unsafely-treat-insecure-origin-as-secure="http://example.com" bandera (reemplazando "example.com" con el origen que realmente desea probar), que tratará ese origen como seguro para esta sesión. Tenga en cuenta que también necesita incluir --user-data-dir=/test/only/profile/dir para crear un nuevo perfil de prueba para que la bandera funcione.

Por ejemplo si usa Windows, haga clic en Inicio y ejecutar.

chrome --unsafely-treat-insecure-origin-as-secure="http://localhost:8100"  --user-data-dir=C:\testprofile
 2
Author: Injection,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-02 11:09:47

En HTTP se produce el error.

Establezca el permiso para localhost en la etiqueta de abajo(Acepte las solicitudes de estos referentes HTTP (sitios web)).

Funcionó para mí.

 0
Author: srmilon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-10 09:10:21

Use FireFox o cualquier otro navegador en lugar de Chrome si desea probarlo en su entorno de desarrollo, para la producción no hay otra manera que usar https.

Para el entorno de desarrollo simplemente abra http://localhost:8100/ en FireFox y por desgracia no hay tal error.

 0
Author: Edris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-29 09:03:20

Sé que la API de geolocalización es mejor, pero para las personas que no pueden usar un SSL, aún puede usar algún tipo de servicios como geopluginService.

Como se especifica en la documentación, simplemente envíe una solicitud con la ip a la url del servicio http://www.geoplugin.net/php.gp?ip=xx.xx.xx.xx el resultado es un array serializado, por lo que debe necesitar no serializarlo antes de usarlo.

Recuerde que este servicio no es muy preciso como lo es la geolocalización, pero sigue siendo una solución fácil y rápida.

 0
Author: Jeffery ThaGintoki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-14 07:57:36

Dé algo de tiempo para instalar un certificado SSL getCurrentPosition() y watchPosition() ya no funciona en orígenes inseguros. Para usar esta función, debe considerar cambiar su aplicación a un origen seguro, como HTTPS.

 -3
Author: Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 07:36:51