2013-02-19 8 views
8

Wenn ein Benutzer meine Website besucht, überprüfe ich, ob ich eine Standort-Sitzung in PHP festgelegt habe. Wenn keine Sitzung mit dem Standort des Benutzers eingerichtet wurde, leite ich sie auf www.domain.net/location um. Auf dieser Seite gibt es eine Reihe von Optionen, mit denen der Benutzer einen Standort auswählen kann. Wenn der Browser es zulässt, ist eine der Optionen, den Browser zu verwenden, um dies zu setzen. Der folgende Code funktioniert wirklich gut.Wie geolocation ablaufen oder zurücksetzen

Das Problem, das ich habe, ist, dass, sobald ein Benutzer den Browser erlaubt hat, den Standort zu teilen, der für immer eingestellt scheint. Während der Benutzer den Standort wechselt, können sie ihren Standort ändern, sodass sie dann auf eine Schaltfläche klicken, um erneut zur Seite www.domain.net/location zu gelangen. Ohne dass etwas auftaucht, nimmt es automatisch den Standort des Browsers auf und leitet sie um. Es gibt andere Standortoptionen auf der Seite, einschließlich einer anklickbaren Karte, ich muss wirklich in der Lage sein, zurücksetzen, ablaufen, löschen, etwas erzwingen, so dass der Browser erneut fragt, ob der Benutzer den Browser verwenden möchte, um den Standort festzulegen oder zuzulassen Benutzer, um eine der anderen Optionen zu verwenden.

Das einzige, was ich mir vorstellen kann, ist, das eigentliche Javascript unten auf eine andere Seite zu verschieben und auf der www.domain.net/location Seite eine andere Schaltfläche zu haben, die etwas wie 'Benutze meinen genauen Standort' sagt und das dann verlinken würde zum JS unten.

Kennt jemand eine andere Möglichkeit, dies oder etwas zurückzusetzen?

<script type="text/javascript" charset="utf-8"> 


    function findLocation() 
    { 
     var options = {timeout: 60000}; 
     navigator.geolocation.getCurrentPosition(foundLocation, noLocation, options); 
    } 

    function foundLocation(position) 
    { 
     var lat = position.coords.latitude; 
     var lng = position.coords.longitude; 

     //alert('Found location: ' + lat + ', ' + lng); 
     window.location = "http://www.domain.net/?lat=" + lat + "&lng=" + lng; 
    } 

    function noLocation() 
    { 
     alert('Could not find location'); 
     window.location = "http://www.domain.net/location"; 
    } 

    findLocation(); 


    </script> 

Antwort

1

Ich habe zwar nur mit der JavaScript-Location API ein paar Mal gespielt, aber mein Verständnis ist, dass der Browser Benutzereinstellungen speichert (diese Annahme scheint here verstärkt werden).

Die angegebene Seite schlägt vor, dass die Präferenz des Benutzers pro Website (Domäne) anstatt pro URL gespeichert wird. Wenn dies nicht der Fall ist, sollte das Hinzufügen eines zufälligen Zeichenfolgenwerts zur URL den Zweck erfüllen. EDIT: Ich habe überprüft und die Ausnahmen sind pro Domäne definiert:

Das würde Ihren Vorschlag machen, den Code auf eine andere Seite zu verzögern - oder binden Sie es an ein Ereignis, das nicht auf Seite läuft, die beste Lösung, die ich denken kann von der Hand.

2

Dies ist eine pro-Browser-Einstellung, nicht etwas, das Sie auf der Skriptseite steuern können. Was Sie möglicherweise tun können, ist die Bereitstellung eines Links such as this one, der erläutert, wie Geolocation-Einstellungen für bestimmte Websites für den angegebenen Browser aktualisiert werden.

Es scheint, als könnten Sie Ihr spezifisches Problem umgehen, indem Sie nicht auf /location verlinken, sondern auf /location?update oder etwas Ähnliches. Gehen Sie im Wesentlichen zur Standortseite, aber fügen Sie etwas hinzu, das die automatische Weiterleitung verhindert, sodass der Benutzer eine andere Entscheidung über seinen Standort treffen kann.

0

Ich habe mich entschieden, am Ende der URL die Option "change-location" hinzuzufügen und PHP zu verwenden, um dies zu überprüfen und dann das Javascript auf der Seite auszublenden. Dies ist keine großartige Lösung, aber es sieht so aus, als wäre dies eine Einstellung pro Browser und nicht etwas, das Sie mithilfe eines Skripts zurücksetzen können. Es scheint, dass, sobald der Benutzer "merke meine Präferenz" gesagt hat, das ist, was es tun wird, bis sie in das Einstellen und Ändern dieses auf ihrem Browser eingreifen.

+0

Dies sollte eher ein Kommentar als eine Antwort sein (und vielleicht ein Kommentar zu meiner Antwort, dass dies mehr oder weniger das ist, was ich beschrieben habe). –

1

Wenn der Benutzer Ihrer Site die Erlaubnis gibt, seinen Standort zu verwenden, speichert er einfach "allow" zusammen mit Ihrer Site-URL in den Sicherheitseinstellungen des Browsers. Es speichert nicht den tatsächlichen Standort. Das geschieht über Code. Wenn Sie einen neuen Ort verwenden möchten, erhalten Sie ihn einfach mit Javascript.

navigator.geolocation.getCurrentPosition(function(position) { 
    do_something(position.coords.latitude, position.coords.longitude); 
}); 

Sehen Sie hier für weitere Informationen bekommen Geolocation: https://developer.mozilla.org/en-US/docs/WebAPI/Using_geolocation

Wenn Sie den Speicherort in einem Cookie sind das Speichern und Wiederverwenden dieser Lage, nur klar Ihre Cookie und setzen Sie ihn, oder nicht verwenden Cookies überhaupt.

Um die Speicherung der Geolokalisierungseinstellungen in Chrome anzuzeigen, öffnen Sie die Chrome-Optionen "Dreifachleiste"> Einstellungen> Erweitert ...> klicken Sie unter Datenschutz auf Inhaltseinstellungen> unter Standort auf Ausnahmen verwalten.