javascript - origins - getCurrentPosition() y watchPosition() están en desuso en orígenes inseguros
navigator geolocation getcurrentposition chrome error (10)
Debido a que 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á una clave API del navegador, así que no olvide limitar su uso al nombre de host de su página.
Lo uso como método alternativo al método
getCurrentPosition()
si falla.
Me permite hacerlo funcionar hasta que cambie a HTTPS.
Aquí están los JSFiddles:
Recibo este error en mi sitio web que solicita datos de geolocalización del usuario:
getCurrentPosition () y watchPosition () están en desuso en orígenes inseguros, y el soporte se eliminará en el futuro. Debería considerar cambiar su aplicación a un origen seguro, como HTTPS. Ver goo.gl/rStTGz para más detalles.
Quiero decir, es básicamente solo un aviso, y el enlace de Google solo dice que está en desuso.
No tengo planes de mover mi sitio web a SSL ... ¿hay alguna alternativa para alguien como yo?
En HTTP se produce el error.
Establezca el permiso para localhost en la etiqueta de abajo (Aceptar solicitudes de estos referentes HTTP (sitios web)).
A mi me funciono.
Encontré una respuesta probable en las publicaciones 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á estando bien y no hay planes para crear un reemplazo equivalente para el uso de HTTP.
Puede ejecutar Chrome con el indicador --unsafely-treat-insecure-origin-as-secure = "http://example.com" (reemplazando "example.com" con el origen que realmente desea probar), que tratará ese origen tan seguro para esta sesión. Tenga en cuenta que también debe incluir --user-data-dir = / test / only / profile / dir para crear un nuevo perfil de prueba para que el indicador funcione.
Por ejemplo, si usa Windows, haga clic en Inicio y ejecútelo.
chrome --unsafely-treat-insecure-origin-as-secure="http://localhost:8100" --user-data-dir=C:/testprofile
Puede usar la API https://ipinfo.io 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. Aquí hay 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 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);
});
};
});
Ver http://ipinfo.io/developers/replacing-navigator-geolocation-getcurrentposition para más detalles.
Sé que la API geoLocation es mejor, pero para las personas que no pueden usar un SSL, aún pueden 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 de servicio
http://www.geoplugin.net/php.gp?ip=xx.xx.xx.xx
la salida es una matriz serializada, por lo que debe necesitar para deserializarlo antes de usarlo.
Recuerde que este servicio no es muy preciso como lo es la ubicación geográfica, pero sigue siendo una solución fácil y rápida.
Si. Google Chrome ha desaprobado la función en la versión 50. Si intentó usarla 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, debe agregar un certificado SSL. Bueno, esa es la única forma.
Y ahora es bastante fácil usar Let''s Encrypt . Aquí hay una guide
Y para fines de prueba, puedes probar esto:
1.localhost se trata como un origen seguro a través de HTTP, por lo que si puede ejecutar su servidor desde localhost, debería poder probar la función en ese servidor.
2.Puede ejecutar Chrome con el indicador --unsafely-treat-insecure-origin-as-secure = "http://example.com" (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 debe incluir --user-data-dir = / test / only / profile / dir para crear un nuevo perfil de prueba para que el indicador funcione.
Creo que Firefox también restringió al usuario el acceso a las solicitudes de la API de GeoLocation desde
http
.
Aquí está el registro de cambios del webkit:
https://trac.webkit.org/changeset/200686
Solo para desarrolladores, puede autorizar dominios locales específicos para usar estas funciones:
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 forma que usar
https
.
Para el entorno de desarrollo, simplemente abra
http://localhost:8100/
en FireFox y, por desgracia, no hay tal error.
getCurrentPosition()
algo de tiempo a instalar un
getCurrentPosition()
SSL
getCurrentPosition()
y
watchPosition()
ya no funcionan en orígenes inseguros.
Para usar esta función, debe considerar cambiar su aplicación a un origen seguro, como HTTPS.