2016-06-15 23 views
9

Oggi abbiamo riscontrato un problema nel rilevamento automatico del codice postale in base alla posizione dell'utente. ha funzionato bene in altri browser (bordo, IE, Firefox) Abbiamo avuto per configurare i siti in HTTPS e quindi funziona beneI siti Http non rilevano la posizione in Chrome - problema

Esempio: https://www.whatismyzip.com/ funziona bene dove come http://www.mapdevelopers.com/what-is-my-zip-code.php lavoro does'nt.

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyAdGQKI4sEj5TZAjNCds422V_ZHevD45Fo"></script> 
<%-- <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"></script>--%> 

<%--  <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?libraries=places"></script> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>--%> 
    <script type="text/javascript"> 


     function ShowMessages() { 

      debugger; 
      if (navigator.geolocation) { 
       navigator.geolocation.getCurrentPosition(success); 
      } else { 
       alert("Geo Location is not supported on your current browser!"); 
      } 
      function success(position) { 
       debugger; 
       var lat = position.coords.latitude; 
       var lng = position.coords.longitude; 
       var latlng = new google.maps.LatLng(lat, lng); 
       var geocoder = geocoder = new google.maps.Geocoder(); 
       geocoder.geocode({ 'latLng': latlng }, function (results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
         if (results[1]) { 

          var searchAddressComponents = results[0].address_components, 
          searchPostalCode = ""; 
          $.each(searchAddressComponents, function() { 
           if (this.types[0] == "postal_code") { 
            searchPostalCode = this.short_name; 
           } 
          }); 

          document.getElementById('hidden1').value = searchPostalCode 
          __doPostBack('', ''); 


         } 
        } 
       }); 
      } 

     } 

Qualsiasi aiuto/soluzione sarebbe apprezzato.

MODIFICA: oltre all'API di Google, ci sono altre alternative di lavoro?

+0

possibile duplicato di [GetcurrentPosition non funziona una volta distribuito] (http://stackoverflow.com/questions/37192827/getcurrentposition-doesnt-work-once-deployed) – geocodezip

+0

@geocodezip: Non ho trovato alcuna soluzione sul sopra i riferimenti, qualsiasi suggerimento su come farlo funzionare su http è il benvenuto. – SSJGSS

+0

Non funzionerà più su Chrome su http: // (a meno che non si utilizzi una versione precedente, che non è particolarmente utile) – geocodezip

risposta

4

La nuova regola di sicurezza introdotto nel Chrome 50 non invia informazioni sulla posizione alla Siti senza Transfer Encryption.

Here sono le alternative adatte ai problemi dell'API di mappatura.

Anche il ripristino delle versioni precedenti di Chrome (50) è una soluzione, ma nello sviluppo Web è piuttosto difficile farlo.

Ma il fatto è che, attualmente solo Chrome ha tali problemi con Mapping API e altri Browser loro (Which gives me a short term peace of mind) sostiene ancora.

Ma prima o poi, questo potrebbe essere praticato anche da altri browser, il che potrebbe essere un grosso problema per gli utenti esistenti a differenza di me. Dal momento che si tratta di un processo a lungo termine (nel mio caso), è meglio iniziare a sviluppare e migrare verso siti https anziché essere in http, come mai ci sono pros and cons nella loro gestione.

12

Non è possibile utilizzare l'API HTML5 Geolocation con connessioni non sicure come sotto:

A partire da Chrome 50, Chrome non supporta più di ottenere la posizione dell'utente utilizzando l'API di HTML5 Geolocation dalle pagine consegnato da connessioni non sicure. Ciò significa che la pagina che sta effettuando la chiamata all'API di geolocalizzazione deve essere servita da un contesto protetto come ad esempio HTTPS.

Tuttavia, è possibile utilizzare i Google Maps Geolocation API o GeoIP, e possibilmente altri, anche se non è raccomandato nel lungo termine. Vedere di seguito:

Ci sono una serie di opzioni di fallback disponibili per ottenere posizione di un utente che non sono interessati da questo cambiamento, come ad esempio Google Maps Geolocation API, GeoIP (ad esempio, ci sono altri geo base Soluzioni ) e un codice di avviamento postale inserito dall'utente. Tuttavia, consigliamo fortemente che suggerisca che il percorso migliore per garantire l'accesso in corso alla geolocalizzazione sia quello di passare a HTTPS.

Fonte: Geolocation API removed from unsecured origins in Chrome 50

+0

Qualche frammento di codice disponibile per abilitarlo per ora? – SSJGSS

+0

Non ci sono snippet di codice. È necessario ospitare lo script con l'API di geolocalizzazione in un ambiente HTTPS e quindi recuperare i dati da lì sulla pagina HTTP. Altrimenti puoi richiedere un'API di terze parti per ottenere la posizione dell'utente e riutilizzarla sulla tua pagina. – MacK

+0

@MacK Non è possibile ospitare lo script in un ambiente SSL e ottenere i risultati in una pagina HTTP. Provato e non funziona. SSL deve essere presente anche nella pagina. –

5

deprecando Potenti funzionalità di sicure origini

Chrome Security originariamente inviato questo fuori per varie mailing list di sviluppo del browser. Vedi l'email originale intent-to-deprecate su blink-dev. Questo si basa sull'idea originale di preferire origini sicure per potenti nuove funzionalità.

Proposta

Vogliamo iniziare ad applicare i concetti in https://w3c.github.io/webappsec-secure-contexts/to caratteristiche che hanno già spediti e che non soddisfano i (nuovi, non presenti al momento) i requisiti. In particolare, questo richiede approssimativamente che le potenti funzionalità siano accessibili solo su "origini sicure" (come HTTPS) in cui anche la catena di antenati completa è sicura.

che si sono prefissati per iniziare richiedendo origini sicure per queste caratteristiche esistenti:

Geolocation — requires secure origins as of M50 Device motion/orientation EME getUserMedia AppCache

Come con gradualmente marking HTTP as non-secure, ci aspettiamo di migrare gradualmente queste caratteristiche per garantire solo, sulla base di soglie di utilizzo, iniziando con l'utilizzo più basso e andando verso l'alto. Ci aspettiamo inoltre di indicare gradualmente in UX che le funzionalità sono deprecate per origini non protette.

La strategia di ritiro per ciascuna di queste funzionalità non è stata decisa e potrebbe differire molto da una funzione all'altra. Al momento non sappiamo quali saranno le soglie o quanto siano pesantemente utilizzate le funzionalità su quali tipi di origini. Stiamo procedendo alla raccolta di dati e riferiremo quando lo avremo. Non ci sono piani fissi in questo momento, a parte un'eventuale deprecazione. Intendiamo per questo stimolare una discussione pubblica sul modo migliore per affrontare questa deprecazione.

Test di un Deprecated potente funzione

Dopo una funzione è stata deprecata, se sei uno sviluppatore che ha bisogno di mantenere testare una caratteristica su un server che non dispone di un certificato valido, si hanno due opzioni:

localhost viene considerato come origine sicura su HTTP, quindi se si è in grado di eseguire il server da localhost, si dovrebbe essere in grado di testare la funzionalità su quel server. È possibile eseguire chrome con il flag --unsafely-treat-insecure-origin-as-secure="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 lo --user-data-dir=/test/only/profile/dir per creare un nuovo profilo di test affinché il flag funzioni.

+1

Bella spiegazione! Quindi dobbiamo cercare altre nuove funzionalità che saranno deprecate anche !! – SSJGSS

+1

Sì, migliore aggiornamento a https a breve :) –

+0

Non funziona per Chrome 56 su Mac OS. – kaiser

3

So che questo non è un luogo di discussione ma questa risposta probabilmente rappresenta la maggior parte dei programmatori che hanno implementato la geolocalizzazione nelle loro applicazioni.

Come indicato in altre risposte "Geolocation API removed from unsecured origins in Chrome 50".
Beh, questa è una strana mossa di Google.
Sostengono che le modifiche sono dovute alla privacy dell'utente.

Ciò compromette seriamente la privacy dell'utente.

Google si preoccupa della privacy degli utenti (ride).
Ho sviluppato numerose applicazioni (plug-in CMS, modelli di applicazioni standalone) utilizzando l'API di geolocalizzazione HTML5 per uso pubblico.
Non posso davvero dire a 1000 utenti di ottenere un certificato SSL.

Dal mio punto di vista Google sta cercando di rendere Internet più costoso e inaccessibile per la maggior parte degli sviluppatori indipendenti e dei "superutenti".

Le alternative sono:

  • Utilizzando geolocalizzazione API da parte di Google (le richieste limitate, pagare di più)

  • ottenere un servizio a pagamento.

  • Ottenere e installare uno SSL cert

ho provato a caricare lo script geolocalizzazione da una posizione HTTPS sullo stesso server e dalla CDN pubblici accessibili (github), ma è apparso lo stesso errore.
Chrome richiede un SSL installato anche sul sito web.

+1

Secondo. Una strana mossa di Google. – SSJGSS

Problemi correlati