2012-04-09 11 views
9

Sto costruendo un piccolo script che i client installeranno sulla loro pagina. La geolocalizzazione non è necessaria per questo, tuttavia se esiste sarebbe bello avere. C'è un modo per me per controllare se la pagina dei clienti ha richiesto le informazioni di geolocalizzazione e se l'utente selezionato consente di ottenere il lat & lon senza creare un altro prompt?Controlla se la geolocalizzazione era consentita e ottieni Lat Lon

risposta

12

non è possibile con le API di geolocalizzazione, ma è possibile con la nuova autorizzazione API

Questo codice è utile se si vuole provare a ricevere le coordinate, ma non si vuole disturbare l'utente con un pronta dialogo cuz le coordinate non è così importante e può così, ripiegate sulla geoip

function getCoords(){ 
    return new Promise((resolve, reject) => 

     navigator.permissions ? 

     // Permission API is implemented 
     navigator.permissions.query({name:'geolocation'}).then(permission => 
      // is geolocation granted? 
      permission.state === "granted" 
      ? navigator.geolocation.getCurrentPosition(pos => resolve(pos.coords)) 
      : resolve(null), 
     reject) : 

     // Permission API was not implemented 
     reject(new Error("Permission API is not supported")) 
    ) 
} 

getCoords().then(coords => console.log(coords)) 

Questo risolverà a nulla, se non è stata concessa l'autorizzazione, lanciare un errore se un po 'di codice javascript non è stato supportato dal browser e risolvere le coordinate se è stato concesso

+2

Questo è un approccio pratico ma, poiché si tratta di un'API piuttosto nuova, è importante menzionare i possibili problemi di compatibilità. Ad esempio: http://caniuse.com/#feat=permissions-api – Mario

5

È possibile rilevare se la funzione esiste esaminando l'oggetto finestra.

if('geolocation' in window){ 
    navigator.geolocation.getCurrentPosition(...); 
} 

questo causerà un prompt singolo utente a venire che chiede all'utente se desiderano condividere la loro posizione con la tua pagina.

Se la geolocalizzazione non è disponibile nel browser, non verrà eseguita affatto.


EDIT Se hai già richiesto l'utente su questo caricamento della pagina per consentire l'accesso geolocalizzazione, esso non richiederà nuovamente. Se l'utente si sposta indietro e torna a questa pagina, lo richiederà nuovamente.

È possibile effettuare chiamate successive all'API senza richiedere durante quella sessione di pagina.

Riferimento: MDN Geolocation -- Watching the current position

+0

Non penso che gli importi se il browser lo supporta o meno - vuole sapere se, nel caso in cui il browser lo supporti, può chiamare 'getCurrentPosition()' * senza * un prompt perché il sito ha già causato un tale prompt prima. – ThiefMaster

+0

@ThiefMaster. Questo non è un downvote a meno che tu non abbia posto la domanda. L'intenzione del richiedente domanda non è chiara. In tal caso, tuttavia, si prega di consultare il mio aggiornamento. – tkone

+0

@TheifMaster thats correct – Stefan

4

Secondo il API non è possibile per scoprire l'utente ha già consentito il sito corrente per recuperare la posizione dell'utente senza causare un prompt se non ha. Vedere Endless answer

Suggerirei di consentire agli utenti di passare un argomento quando si incorpora lo script indicando se deve utilizzare le funzionalità di geolocalizzazione o meno.

2

Se il prompt richiesto dipende dal browser e dalle impostazioni di "privacy" disponibili. Safari 6 ha 3 impostazioni: richiede una volta per sito, richiede una volta per sito al giorno e nega. Chrome 23 ha 3 impostazioni: consenti a tutti, chiedi e nega tutto. Certo sarebbe meglio se ci fosse un modo per verificare se è già consentito senza disturbare l'utente.

Problemi correlati