2013-02-19 19 views
8

जब कोई उपयोगकर्ता मेरी वेबसाइट पर जाता है तो मैं यह देखने के लिए जांच करता हूं कि मेरे पास PHP में एक स्थान सत्र सेट है या नहीं। यदि उपयोगकर्ता स्थान के साथ कोई सत्र सेट नहीं है, तो मैं उन्हें www.domain.net/location पर रीडायरेक्ट करता हूं। इस पृष्ठ पर उपयोगकर्ता को स्थान चुनने के लिए कई विकल्प हैं। यदि ब्राउजर इसे विकल्पों में से एक विकल्प को ब्राउज़र सेट करने के लिए उपयोग करने की अनुमति देता है। नीचे कोड वास्तव में अच्छी तरह से काम करता है।भौगोलिक स्थान

मेरे पास यह मुद्दा यह है कि एक बार उपयोगकर्ता ने ब्राउज़र को स्थान साझा करने की अनुमति दी है, ऐसा लगता है कि यह हमेशा के लिए सेट किया जाता है। जब उपयोगकर्ता ब्राउज़ कर रहा है, तो वे अपना स्थान बदलने का निर्णय ले सकते हैं ताकि वे फिर से www.domain.net/location पृष्ठ पर जाने के लिए एक बटन पर क्लिक करें। कुछ भी पॉप अप करने के बिना यह स्वचालित रूप से ब्राउज़र स्थान को उठाता है और उन्हें रीडायरेक्ट करता है। क्लिक करने योग्य मानचित्र सहित पृष्ठ पर अन्य स्थान विकल्प हैं, मुझे वास्तव में रीसेट करने, समाप्त करने, हटाने, कुछ बल देने में सक्षम होना चाहिए ताकि ब्राउजर फिर से पूछ सकें कि क्या उपयोगकर्ता स्थान सेट करने के लिए ब्राउज़र का उपयोग करना चाहता है या अनुमति देने के लिए उपयोगकर्ता अन्य विकल्पों में से एक का उपयोग करने के लिए।

एकमात्र चीज जिसे मैं सोच सकता हूं, वास्तविक जावास्क्रिप्ट को किसी अन्य पृष्ठ पर नीचे ले जाना है और www.domain.net/location पृष्ठ पर एक और बटन है जो 'मेरे सटीक स्थान का उपयोग करें' जैसा कुछ कहता है और फिर लिंक करेगा नीचे जेएस के लिए।

क्या किसी को यह या कुछ रीसेट करने का एक और तरीका पता है?

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

उत्तर

1

मैं वैसे ही जावास्क्रिप्ट स्थान के साथ खेला जाता है एक दो बार एपीआई, लेकिन मैं समझता हूँ कि ब्राउज़र उपयोगकर्ता वरीयता (इस धारणा here प्रबलित किया जा रहा है) को संग्रहीत करता है।

उद्धृत पृष्ठ से पता चलता है कि उपयोगकर्ता की प्राथमिकता प्रति यूआरएल की बजाय प्रति साइट (डोमेन) आधार पर संग्रहीत की जाती है। यदि यह मामला नहीं है तो URL में एक यादृच्छिक स्ट्रिंग मान जोड़ना चाल करना चाहिए। संपादित करें: मैंने जांच की है और छूट प्रति डोमेन परिभाषित की गई है:

इससे कोड को दूसरे पृष्ठ पर स्थानांतरित करने का सुझाव मिलेगा - या किसी ऐसे ईवेंट पर बाध्यकारी होगा जो पेज लोड पर नहीं चलता है, जो सबसे अच्छा समाधान है जिसे मैं सोच सकता हूं हाथ से

2

यह प्रति ब्राउज़र सेटिंग है, ऐसा कुछ नहीं जिसे आप स्क्रिप्ट पक्ष पर नियंत्रित कर सकते हैं। आप क्या कर सकते हैं एक लिंक such as this one प्रदान करता है जो बताता है कि दिए गए ब्राउज़र के लिए विशेष वेबसाइटों के लिए भौगोलिक स्थान सेटिंग कैसे अपडेट करें।

ऐसा लगता है कि आप /location से लिंक करके अपनी विशिष्ट समस्या के आसपास नहीं हो सकते हैं, लेकिन /location?update या उससे कुछ इस तरह से लिंक कर सकते हैं। अनिवार्य रूप से, स्थान पृष्ठ पर जाएं लेकिन स्वचालित रीडायरेक्ट को रोकते हुए कुछ ऐसा जोड़ें जिससे उपयोगकर्ता अपने स्थान के बारे में एक अलग निर्णय ले सके।

0

मैंने यूआरएल के अंत में परिवर्तन-स्थान जोड़ने का फैसला किया है और इसके लिए जांचने के लिए PHP का उपयोग करें और फिर पृष्ठ पर जावास्क्रिप्ट को छुपाएं। यह एक अच्छा फिक्स नहीं है लेकिन ऐसा लगता है कि यह प्रति ब्राउज़र सेटिंग है और ऐसा कुछ नहीं जिसे आप स्क्रिप्ट का उपयोग करके रीसेट कर सकते हैं। ऐसा प्रतीत होता है कि एक बार जब उपयोगकर्ता ने 'मेरी वरीयता याद रखी' तो यह तब तक किया जाएगा जब तक कि वे सेटिंग में खोदने और अपने ब्राउज़र पर इसे बदल नहीं लेते।

+0

यह एक उत्तर के बजाय एक टिप्पणी होना चाहिए (और शायद मेरे उत्तर पर एक टिप्पणी यह ​​है कि मैंने जो कुछ करने के लिए वर्णित किया है)। –

1

यदि उपयोगकर्ता आपकी साइट का उपयोग करने की अनुमति देता है, तो यह ब्राउज़र सुरक्षा सेटिंग्स में आपकी साइट यूआरएल के साथ "अनुमति" स्टोर करता है। यह वास्तविक स्थान को स्टोर नहीं करता है। यह कोड के माध्यम से किया जाता है। यदि आप एक नए स्थान का उपयोग करना चाहते हैं, तो बस इसे जावास्क्रिप्ट के साथ प्राप्त करें।

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

हो रही जियोलोकेशन के बारे में अधिक के लिए यहाँ देखें: https://developer.mozilla.org/en-US/docs/WebAPI/Using_geolocation

आप एक कुकी में स्थान भंडारण कर रहे हैं और फिर से उपयोग कर रहा है कि स्थान, बस स्पष्ट अपने कुकी और रीसेट यह, या का उपयोग नहीं करते कुकीज़ बिल्कुल

भौगोलिक स्थान सेटिंग के क्रोम के भंडारण को देखने के लिए, अपने क्रोम विकल्प "ट्रिपल बार"> सेटिंग्स> उन्नत ...> गोपनीयता के अंतर्गत खोलें, सामग्री सेटिंग्स> स्थान के नीचे क्लिक करें, अपवाद प्रबंधित करें पर क्लिक करें।

संबंधित मुद्दे