2012-02-09 19 views
7

मैं जिओलोकेशन ऑब्जेक्ट का उपयोग कर रहा हूं और getCurrentPosition() प्राप्त कर रहा हूं।जब उपयोगकर्ता फ़ायरफ़ॉक्स और क्रोम में "भौतिक स्थान" प्रॉम्प्ट बंद करता है तो कैसे संभालें?

क्या आपने देखा है कि हर बार जब आप getCurrentPosition फ़ायरफ़ॉक्स और क्रोम का उपयोग करते हैं तो इन मालिश को संकेत दें?

क्रोम:

Example.com wants to track your physical location [allow] [deny] [ X close ] 

फ़ायरफ़ॉक्स:

Example.com wants to know your location [Share Location] [Don't Share] [Close] 

मेरा प्रश्न है: कैसे संभाल करने के लिए जब कोई उपयोगकर्ता नहीं "अनुमति दें" करता है और न ही "अस्वीकार करें" स्थान विकल्प लेकिन इसके बजाय शीघ्र बंद कर देता है?

मैं यह जावा स्क्रिप्ट कोड, लेकिन जब उपयोगकर्ता शीघ्र बंद कर देता है यह काम नहीं करता:

  if (navigator.geolocation) { 
       navigator.geolocation.getCurrentPosition(
        onSuccess, 
        onError, 
        { 
         //enableHighAccuracy: true, 
         timeout: 5000 
         //maximumAge: 120000 
        } 
       ); 
        alert("holaaaa"); 
      } else { 
       alert('Geolocation not supported.'); 
      } 

मुझे लगता है कि के साथ कुछ समस्याएं हो रही हैं किसी भी मदद कृपया?

यह सवाल इस पोस्ट से संबंधित है: How to call function when user Allows or Denies access to "Physical Location"?

+0

मैंने पहले इस मुद्दे पड़ा है और किसी भी नहीं मिल सका उस समय समाधान, मुझे संदेह है कि अभी भी कोई समाधान हैं। –

+0

वह व्यवहार उन ब्राउज़रों में कॉन्फ़िगर करने योग्य है। मेरा भी पूछना नहीं है, इसलिए मैं कभी भी "प्रॉम्प्ट बंद नहीं करता"। मेरा हमेशा निंदा करने के लिए कॉन्फ़िगर किया गया है। मैं "अस्वीकार" के रूप में व्यवहार करने के लिए "करीबी" की अपेक्षा करता हूं। –

+0

@StephenP: यदि आपने क्रोम को "कभी नहीं पूछने" के लिए कॉन्फ़िगर किया है, तो यह वास्तव में तुरंत 'त्रुटि कॉलबैक' (जैसे कि आपने अस्वीकार किया है) को तुरंत निकाल दिया है। फ़ायरफ़ॉक्स कुछ भी नहीं करता है। – josh3736

उत्तर

15

spec यदि उपयोगकर्ता केवल (के रूप में करने का विरोध किया की अनुमति के लिए अनुरोध को खारिज करते हुए वास्तव में पर किया जाए या नहीं एक कॉलबैक निष्पादित किया जाना चाहिए या टिप्पणी नहीं है इंकार बटन) पर क्लिक:

दोनों getCurrentPosition और watchPosition के लिए, कार्यान्वयन एफआईआर बिना successCallback आह्वान कभी नहीं होना चाहिए स्थान साझा करने के लिए उपयोगकर्ता से अनुमति प्राप्त नहीं की। इसके अलावा, कार्यान्वयन को ऊपर वर्णित getCurrentPosition या watchPosition किसी भी निष्पादन को निष्पादित करने से पहले स्थान साझा करने के लिए उपयोगकर्ता की अनुमति हमेशा प्राप्त करनी चाहिए। यदि उपयोगकर्ता अनुमति देता है, तो ऊपर वर्णित अनुसार उचित कॉलबैक लागू किया जाना चाहिए। यदि उपयोगकर्ता अनुमति से इनकार करता है, तो errorCallback (यदि मौजूद है) को कोड PERMISSION_DENIED के साथ लागू किया जाना चाहिए, चाहे उपरोक्त चरणों में किसी भी अन्य त्रुटि का सामना किया जाए। उपयोगकर्ता अनुमति प्राप्त करने में व्यतीत समय को timeoutPositionOptions पैरामीटर की विशेषता द्वारा कवर अवधि में शामिल नहीं किया जाना चाहिए। timeout विशेषता केवल स्थान अधिग्रहण ऑपरेशन पर लागू होनी चाहिए।

मैं कहूंगा कि अनुमति अनुरोध को खारिज करना getCurrentPosition के दृष्टिकोण से अनुरोध को अस्वीकार करने के बराबर है। डेनी पर क्लिक करना स्पष्ट है जबकि बर्खास्तगी (एक्स पर क्लिक करना) अंतर्निहित है।

कार्यात्मक रूप से, अंतर यह है कि डेनी बटन पर क्लिक करने का मतलब है (1) वर्तमान अनुरोध अस्वीकार कर दिया गया है, और (2) साइट कालीसूचीबद्ध है और उपयोगकर्ता को साइट के लिए फिर से स्थान साझा करने के लिए संकेत नहीं दिया जाएगा; केवल अनुरोध को खारिज करने का मतलब है कि वर्तमान अनुरोध – भविष्य के अनुरोधों से इनकार कर दिया गया है (भविष्य में BROWSINGCONTEXT एस — पृष्ठ को फिर से लोड करने के बाद) फिर से संकेत दिया जाएगा।

मेरी राय में, क्रोम, Firefox और IE के वर्तमान व्यवहार को एक बग – है सभी तीन कुछ नहीं कर उपयोगकर्ता एक्स अगर जियोलोकेशन अनुमति अनुरोध किसी भी वजह से खारिज कर दिया है errorCallback बुलाया जाना चाहिए पर क्लिक करके अनुमति अनुरोध को खारिज करता है, तो वर्तमान BROWSINGCONTEXT में getCurrentLocation पर और कॉल चुपचाप विफल हो जाएंगी। (ओपेरा 11।52 बर्ताव करती है 'सही ढंग से' क्योंकि इसकी अनुमति अनुरोध यूआई केवल अनुमति दें है/बटन – कोई एक्स अस्वीकार करें)

मोज़िला एक bug वे कहाँ का कहना है कि वर्तमान व्यवहार सही है और एक नए bug खुला बग कि प्रासंगिक है है; Chromuim also says वर्तमान व्यवहार सही है। आईई a bug(पंजीकरण आवश्यक), लेकिन विचित्र रूप से, माइक्रोसॉफ्ट ने इसे गैर-पुन: उत्पन्न करने योग्य के रूप में बंद कर दिया।

यह वास्तव में ऐसा कुछ है जिसे डब्ल्यू 3 सी कार्यकारी समूह को संबोधित करने की आवश्यकता है। पेज गिरावट स्थान अनुमति अनुरोध – कि क्या स्थायी रूप से इनकार किया है या सिर्फ एक्स


केवल एक चीज है कि आप वास्तव में अभी क्या कर सकते हैं इस स्थिति से निपटने के लिए क्लिक करके इस सत्र के लिए मना कर दिया है उपयोगकर्ता के लिए प्रतिक्रिया करने के लिए सक्षम होना चाहिए अपना खुद का टाइमआउट सेट कर रहा है। जियोलोकेशन अनुरोध में एक समाप्ति सेट, और फिर उस से अधिक समय होने के लिए अपने त्रुटि समाप्ति सेट (उपयोगकर्ता समय अनुरोध करने के लिए प्रतिक्रिया करने के लिए अनुमति देने के लिए):

if (navigator.geolocation) { 
    var etimeout = setTimout(onError, 10000); 
    navigator.geolocation.getCurrentPosition(onSuccess, onError, {timeout:5000}); 
} 
function onSuccess(pos) { 
    clearTimeout(etimeout); 
    // ... 
} 
function onError(err) { 
    clearTimeout(etimeout); 
    // Note `err` will actually be undefined if this is the result of our timeout 
    // and anything you do here should be undone by `onSuccess` (in case the user 
    // took longer than 5 seconds to approve the request; for that reason, you 
    // shouldn't display any modal UI from here. 

    // ... 
} 
+1

बार को खारिज करने वाले उपयोगकर्ता का विशिष्ट मामला [फ़ायरफ़ॉक्स] (https://bugzilla.mozilla.org/show_bug.cgi?id=564397) और [क्रोम] (http: // कोड दोनों में WontFix चिह्नित किया गया है। google.com/p/chromium/issues/detail?id=43548) –

+0

@ टिमस्टोन: धन्यवाद, अपडेट किए गए लिंक। – josh3736

+1

इस मुद्दे पर कोई अपडेट? – Sergiu