2015-08-19 24 views
42

sto ottenendo questo errore sul mio sito che richiede i dati di geolocalizzazione da parte dell'utente:getCurrentPosition() e watchPosition() sono deprecati sulle origini insicuri

getCurrentPosition() e watchPosition() sono obsoleti sulle origini insicuri, e il supporto verrà rimosso in futuro. Dovresti considerare di passare la tua applicazione a un'origine sicura, come HTTPS. Vedi goo.gl/rStTGz per maggiori dettagli.

Voglio dire che è fondamentalmente solo un avviso, e il link di Google dice solo che è deprecato.

Non ho in programma di spostare il mio sito Web in SSL ... quindi c'è un'alternativa per qualcuno come me?

+1

Speriamo che non solo interromperanno la funzione senza sostituzione nella versione futura ... –

+0

È probabile che chiudano la funzione senza sostituzione in una versione futura. Questo è esattamente il motivo per cui lo stanno deprecando ora. Preventivo * prevediamo di migrare gradualmente queste funzionalità solo per sicurezza * – MarkJ

risposta

14

trovato una risposta probabilmente in tutti i messaggi di/jstillwell qui: https://github.com/stefanocudini/leaflet-gps/issues/15 in fondo questa funzione non sarà supportata (? In Chrome solo) nel futuro, ma solo per i siti HTTP. HTTPS sarà ancora ok e non ci sono piani per creare un sostituto equivalente per l'uso HTTP.

11

Sì. Google Chrome ha deprecato la funzionalità nella versione 50. Se si è tentato di utilizzare in cromo l'errore è:

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.

Quindi, è necessario aggiungere il certificato SSL. Bene, questo è l'unico modo.

Ed è abbastanza facile ora usando Let's Encrypt. Ecco guide

E a scopo di test si potrebbe provare questo:

1.localhost è trattata come un'origine sicura su HTTP, quindi se siete in grado di eseguire il server da localhost, si dovrebbe essere in grado per testare la funzione su quel server.

2.È possibile eseguire Chrome con il flag - http://secure.com come "http://example.com" (sostituendo "esempio.com" con l'origine che si desidera effettivamente test), che tratterà quell'origine come sicura per questa sessione. Si noti inoltre che è necessario includere --user-data-dir =/test/only/profile/dir per creare un nuovo profilo di test affinché la flag funzioni.

Penso che Firefox abbia anche limitato l'accesso degli utenti alle richieste di API GeoLocation da http. Ecco il changelog webkit: https://trac.webkit.org/changeset/200686

+0

I'm info geeting: "Stai utilizzando un flag della riga di comando non supportato: --unsafely-treat-insecure-origin-as-secure. soffrire". Versione di Chrome: 50.0.2661.102. Anche il congelamento non funziona – instead

+0

Elimina tutte le istanze e riprova. http://stackoverflow.com/questions/6918393/the-disable-web-security-command-is-seems-no-longer-working –

+0

Quando provi la tua app nel browser chrome, modifica l'URL dell'app (in genere 192 .xxx.xxx.xxx: 3000) a localhost: 3000 .. È necessario assicurarsi che la politica dei media lo supporti, ma non si otterrà un errore di sicurezza. – MindWire

37

Perché il passaggio a HTTPS può essere doloroso o impossibile a seconda della vostra architettura, ho trovato una soluzione soluzione: è possibile utilizzare il Google Maps Geolocation API. Anche se ha limiti di utilizzo, fa il lavoro. Avrai bisogno di una chiave API del browser, quindi non dimenticare di limitarne l'utilizzo al nome host della tua pagina.

Lo utilizzo come metodo fallback per il metodo getCurrentPosition() in caso di errore. Mi consente di farlo funzionare finché non passo a HTTPS.

Ecco il JSFiddles:

  • HTTP: getCurrentPosition() fallirà e ripiegare alle API
  • HTTPS: getCurrentPosition() riuscirà
+0

Ciao, puoi pubblicare un esempio per favore? Grazie – Patrick

+8

prova [questo violino] (http://jsfiddle.net/gogs/jwt9f1o3) con e senza HTTPS. – gogson

+0

Ciao! Grande! Sta funzionando! Grazie;) – Patrick

1

È possibile eseguire cromato con il --unsafely-treat -insecure-origin-as-secure = flag "http://example.com" (sostituendo "esempio.com" con l'origine che si desidera testare), che considererà tale origine come sicura per questa sessione. Si noti inoltre che è necessario includere --user-data-dir =/test/only/profile/dir per creare un nuovo profilo di test affinché la flag funzioni.

Ad esempio se si utilizza Windows, fare clic su Avvia ed eseguire.

chrome --unsafely-treat-insecure-origin-as-secure="http://localhost:8100" --user-data-dir=C:\testprofile 
+3

E come si fa a convincere gli utenti a fare questo? –

+1

Questo è buono per lo sviluppo di – madebydavid

0

In HTTP si verifica l'errore.

Impostare il permesso per localhost nell'etichetta muggente (accettare le richieste da questi referrer HTTP (siti Web)).

Ha funzionato per me.

0

Utilizzare FireFox o qualsiasi altro browser invece di Chrome se si desidera testarlo nel proprio ambiente di sviluppo, per la produzione non c'è modo tranne l'utilizzo di https.

Per l'ambiente di sviluppo è sufficiente aprire http://localhost:8100/ su FireFox e purtroppo nessun errore di questo tipo.

-1

Concedere un po 'di tempo per installare un cert SSL getCurrentPosition() e watchPosition() non funzionano più su origini non sicure. Per utilizzare questa funzione, dovresti considerare di passare la tua applicazione a un'origine sicura, come HTTPS.

0

So che l'API di geoLocation è migliore ma per le persone che non possono utilizzare un SSL, è comunque possibile utilizzare alcuni tipi di servizi come geopluginService.

come specificato nella documentazione, è sufficiente inviare una richiesta con l'indirizzo IP all'URL del servizio http://www.geoplugin.net/php.gp?ip=xx.xx.xx.xx l'output è un array serializzato, quindi è necessario disporre di unserialize prima di utilizzarlo.

Ricordare che questo servizio non è molto accurato in quanto la posizione geografica è, ma è comunque una soluzione facile e veloce.

10

È possibile utilizzare l'API https://ipinfo.io per questo (è il mio servizio). È gratuito per un massimo di 1.000 req/giorno (con o senza supporto SSL). Ti dà le coordinate, il nome e altro ancora.Ecco un esempio:

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

Ecco un esempio che costruisce un coordinate oggetto con la risposta API che corrisponde a quello che si ottiene da getCurrentPosition():

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

Ed ecco un esempio dettagliato che mostra come si può utilizzare come ripiego per 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); 
     }); 
    }; 
}); 

Vedere http://ipinfo.io/developers/replacing-navigator-geolocation-getcurrentposition per maggiori dettagli.

+4

questa api sta dando tutti i lat sbagliati e lunghi. – rahul

+0

OTTIENI http://ipinfo.io/ 499 (La richiesta è stata vietata dall'antivirus) – 151291

+0

Quali antivirus hai installato sul tuo computer o sulla rete? –