2016-06-15 12 views
9

Wir haben heute ein Problem bei der automatischen Erkennung von Postleitzahl basierend auf dem Standort des Benutzers festgestellt. es hat gut funktioniert in anderen Browsern (Kante, IE, Firefox) Wir hatten die Websites https zu konfigurieren und dann funktioniert es okHTTP-Websites erkennen den Standort in Chrome nicht - Problem

Beispiel: https://www.whatismyzip.com/ funktioniert gut, wo als http://www.mapdevelopers.com/what-is-my-zip-code.php does'nt Arbeit.

<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('', ''); 


         } 
        } 
       }); 
      } 

     } 

Jede Hilfe/Workaround wäre willkommen.

EDIT: Gibt es außer der Google API noch andere funktionierende Alternativen?

+0

möglich duplicate von [GetcurrentPosition funktioniert nicht einmal bereitgestellt] (http://stackoverflow.com/questions/37192827/getcurrentposition-doesnt-work-once-deployed) – geocodezip

+0

@geocodezip: Ich habe keine Lösungen auf der gefunden Über den Referenzen sind alle Vorschläge, wie es auf http funktioniert, willkommen. – SSJGSS

+0

Es funktioniert nicht mehr in Chrome über http: // (es sei denn, Sie verwenden eine alte Version, die nicht besonders nützlich ist) – geocodezip

Antwort

4

Die neue Sicherheitsregel in Chrome 50 eingeführt hat Informationen nicht ohne Transfer Encryption zu Websites senden.

Here sind die Alternativen, die für die Mapping-API-Probleme geeignet sind.

Das Zurücksetzen auf frühere Versionen von Chrome (50) ist ebenfalls eine Lösung, aber in der Webentwicklung ist dies ziemlich schwierig.

Aber die Tatsache ist, dass derzeit nur Chrome solche Probleme mit Mapping API und anderem Browser hat sie noch unterstützt (Which gives me a short term peace of mind).

Aber früher oder später kann dies auch von anderen Browsern geübt werden, was im Gegensatz zu mir ein großes Problem für die bestehenden Benutzer sein kann. Da es sich um einen langfristigen Prozess handelt (in meinem Fall), ist es besser mit der Entwicklung und Migration auf HTTPS-Sites zu beginnen, anstatt in http zu sein, wie immer es pros and cons im Umgang mit ihnen gibt.

12

Sie können nicht die HTML5 Geolocation API mit nicht-sicheren Verbindungen verwenden, wie pro unten:

mit Chrome Ab 50, Chrome nicht mehr unterstützen den Erhalt des Standort des Benutzers der HTML5 Geolocation API von Seiten mit geliefert durch nicht sichere Verbindungen. Das bedeutet, dass die Seite, die den Geolocation-API-Aufruf aufruft, aus einem sicheren Kontext wie HTTPS bedient werden muss.

Allerdings ist es möglich, die Google Maps Geolocation API oder GeoIP und möglicherweise andere zu verwenden, obwohl es nicht auf lange Sicht zu empfehlen. Siehe unten:

eine Reihe von Ausweichmöglichkeiten zur Verfügung, um einen Benutzers Standort zu erhalten ist, die nicht von dieser Änderung betroffen ist, wie zum Beispiel Google Maps Geolocation API, GeoIP (als Beispiel, gibt es andere geo basierend Lösungen) und eine vom Benutzer eingegebene Postleitzahl. Wir empfehlen jedoch dringend , dass der beste Pfad, um den fortlaufenden Zugriff auf Geolocation zu gewährleisten, ist, zu HTTPS zu wechseln.

Quelle: Geolocation API removed from unsecured origins in Chrome 50

+0

Gibt es einen Code-Snippet, um dies jetzt zu aktivieren? – SSJGSS

+0

Es gibt keine Code-Schnipsel. Sie müssen Ihr Skript mit der Geolocation-API in einer HTTPS-Umgebung hosten und dann die Daten von dort auf Ihrer HTTP-Seite abrufen. Andernfalls können Sie eine API eines Drittanbieters abfragen, um den Benutzerstandort abzurufen und ihn auf Ihrer Seite erneut zu verwenden. – MacK

+0

@MacK Sie können das Skript nicht in einer SSL-Umgebung hosten und die Ergebnisse auf einer HTTP-Seite abrufen. Versuchte es und funktioniert nicht. SSL muss auch auf der Seite vorhanden sein. –

5

deprecating leistungsstarke Funktionen auf Unsichere Origins

Chrome Sicherheit ursprünglich gesendet diese Mailinglisten verschiedene Browser-Entwicklung zu werden. Sehen Sie sich die ursprüngliche E-Mail-Intention zur Deaktivierung von Blink-Dev an. Dies basiert auf der ursprünglichen Idee, sichere Ursprünge für leistungsstarke neue Funktionen zu bevorzugen.

Vorschlag

Wir wollen die Konzepte in https://w3c.github.io/webappsec-secure-contexts/to Funktionen starten Anwendung, die bereits ausgeliefert wurden und die entsprechen nicht den (neu, zu der Zeit nicht vorhanden) Anforderungen. Insbesondere erfordert dies ungefähr, dass mächtige Merkmale nur auf "sicheren Ursprüngen" zugänglich sind (wie HTTPS), wo die vollständige Vorfahrenkette auch sicher ist.

Sie festgelegt haben, indem erfordern sichere Ursprünge für diese bestehenden Funktionen zu starten:

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

Wie bei allmählich marking HTTP as non-secure erwarten wir nach und nach migrieren diese Funktionen zu sichern geschützt, basierend auf Schwellenwerten der Nutzung, beginnend mit der niedrigsten Nutzung und in Richtung höher. Wir erwarten außerdem, dass in UX nach und nach angegeben wird, dass die Features für nicht sichere Ursprünge veraltet sind.

Die Ablehnungsstrategie für jedes dieser Features ist nicht festgelegt und kann sich sehr von Feature zu Feature unterscheiden. Wir wissen derzeit nicht, wie hoch die Schwellwerte sein werden oder wie stark die Merkmale auf welche Arten von Ursprung bezogen sind. Wir sind gerade dabei, Daten zu sammeln, und werden dies melden, sobald wir sie haben. Zu diesem Zeitpunkt gibt es keine konkreten Pläne, abgesehen von eventuellen Abwertungen. Wir beabsichtigen, eine öffentliche Diskussion darüber anzuregen, wie wir diese Abwertung am besten angehen können.

eine leistungsstarke Funktion Veraltete Test

Nach einem Merkmal veraltet ist, wenn Sie ein Entwickler sind, die auf einem Server zu testen, eine Funktion halten muss, die nicht über ein gültiges Zertifikat verfügt, haben Sie zwei Möglichkeiten:

localhost wird als sicherer Ursprung über HTTP behandelt. Wenn Sie also Ihren Server von localhost ausführen können, sollten Sie die Funktion auf diesem Server testen können. Sie können Chrome mit dem Flag --unsafely-treat-insecure-origin-as-secure="http://example.com" (Ersetzen von "example.com" mit dem Ursprung, den Sie tatsächlich testen möchten) ausführen, der diesen Ursprung als sicher für diese Sitzung behandelt. Beachten Sie, dass Sie auch die --user-data-dir=/test/only/profile/dir einbeziehen müssen, um ein neues Testprofil zu erstellen, damit das Flag funktioniert.

+1

Schöne Erklärung! Wir müssen also nach anderen neuen Funktionen Ausschau halten, die ebenfalls veraltet sind. – SSJGSS

+1

Ja, besser bald auf https aktualisieren :) –

+0

Funktioniert nicht für Chrome 56 auf MacOs. – kaiser

3

Ich weiß, dies ist kein Ort, um zu debattieren, aber diese Antwort wahrscheinlich die meisten Programmierer, die Geolocation in ihren Anwendungen implementiert wurden.

Wie in anderen Antworten angegeben "Geolocation API removed from unsecured origins in Chrome 50".
Nun, das ist ein seltsamer Zug von Google.
Sie behaupten, dass die Änderungen auf Privatsphäre des Benutzers zurückzuführen sind.

Dies beeinträchtigt die Privatsphäre des Benutzers erheblich.

Google kümmert sich um die Privatsphäre der Nutzer (lacht).
Ich habe zahlreiche Anwendungen (CMS-Plugins, Standalone-Anwendungsvorlagen) mit HTML5 Geolocation API für die öffentliche Nutzung entwickelt.
Ich kann nicht wirklich 1000 Benutzern sagen, ein SSL-Zertifikat zu erhalten.

Aus meiner Sicht versucht Google, das Internet für die meisten unabhängigen Entwickler und "Superuser" teurer und unzugänglich zu machen.

Alternativen sind:

  • Mit Geolocation-API von Google (begrenzte Anfragen für mehr zahlen)

  • einen bezahlten Service.

  • Erhalten und eine SSL-Zertifikat installiert

Ich versuchte, das Geolocation-Skript von einer HTTPS-Position auf dem gleichen Server und von öffentlich zugänglichen CDNs (Github), aber der gleiche Fehler aufgetreten zu laden.
Chrome erfordert auch eine SSL-Installation auf der Website.

+1

Ich zweite, dass. Ein seltsamer Zug von Google. – SSJGSS

Verwandte Themen