2012-12-13 35 views
8

मैंने आईफोन के लिए एक फोनगैप ऐप बनाया जो वेबव्यू के अंदर जावास्क्रिप्ट के माध्यम से भौगोलिक स्थान का उपयोग करता है।फोनगैप ऐप में भौगोलिक स्थान के लिए डबल प्रॉम्प्ट को कैसे रोकें?

जब मैं पहली बार ऐप चलाता हूं, तो यह मुझे इस ऐप के लिए भौगोलिक स्थान की अनुमति देने के लिए प्रेरित करेगा।

जब मैं "ठीक" दबाता हूं, तो यह मुझे एक ही प्रश्न के साथ फिर से संकेत देगा लेकिन इस बार यह कहता है कि "index.html" भौगोलिक स्थान का उपयोग करने की अनुमति चाहता है।

यह समझ में आता है क्योंकि आईओएस शायद ऐप के लिए पहली बार भौगोलिक स्थान की अनुमति देने की अनुमति चाहता है और दूसरी बार ब्राउजर अनुमति चाहता है।

हालांकि, बाद से शानदार उपयोगकर्ता अनुभव करने के लिए नेतृत्व नहीं करता है:

मैं इस डबल शीघ्र कैसे रोक सकते हैं? (मैं काफी होगा यदि 2 शीघ्र रोका जा सकता है)

उत्तर

14

मुझे इस मुद्दे का कारण मिला।

फोनगैप पूरी तरह से लोड होने से पहले navigator.geolocation.getCurrentPosition(onsuccess, onerror) पर कॉल होता है।

इसका मतलब है कि वेबव्यू (और फोनगैप के माध्यम से मूल कॉल नहीं) का भौगोलिक स्थान कॉल ट्रिगर किया जा रहा है जो फिर से अनुमति मांगेगा (जो समझ में आता है)। इसे अपने स्मार्टफ़ोन पर सामान्य सफारी ब्राउज़र से तुलना करें। यह हर नई वेबसाइट के लिए भौगोलिक स्थान की अनुमति मांगेगा। एप्लिकेशन स्टार्टअप पर PhoneGap के माध्यम से index.html लोड करते समय यह वही है।

document.addEventListener("deviceready", function(){ 
    navigator.geolocation.getCurrentPosition(onsuccess, onerror, params); 
}, false); 

यह PhoneGap एपीआई उपलब्ध कराएगा जो ब्राउज़र की डिफ़ॉल्ट एचटीएमएल 5 gelocation कॉल अधिलेखित कर देता है और मिलती है:

हालांकि, समाधान deviceready घटना है जो जब PhoneGap पूरी तरह से भरी हुई है निकाल दिया जाता है के लिए इंतजार करना एक मूल कॉल के माध्यम से डिवाइस का भौगोलिक स्थान (जिसे आपने पहले संकेत में पहले ही स्वीकार कर लिया है)।

इसका कारण यह है PhoneGap के API कॉल एचटीएमएल 5 के लिए मानक W3C कॉल करने के लिए समान हैं काम करेगा: http://docs.phonegap.com/en/2.2.0/cordova_geolocation_geolocation.md.html#Geolocation

+0

उत्कृष्ट उत्तर timo। अन्य सभी को हटा दिया जाना चाहिए क्योंकि वे विसंगति फैल रहे हैं। – r3wt

0

इस पर एक नज़र डालें: Location permission alert on iPhone with PhoneGap

दूसरा एक वेबकिट चेतावनी हो रहा है। इसे रोकने के लिए, आपको बस अपनी सभी जेएस फ़ाइलों को रूट निर्देशिका में ले जाना होगा। मुझे बताएं, अगर यह काम करता है क्योंकि मुझे जल्द ही एक ही मुद्दे को संबोधित करना होगा।

+0

नहीं के रूप में

<script src="cordova.js"></script> 

ले जाकर इस समस्या का समाधान कर देगा, जो वह नहीं है यह लेकिन अपने लिंक मुझे बताया सही दिशा में। प्रश्न का मेरा जवाब देखें। – Timo

0

अंत में समस्या का समाधान हो।

index.html में

सिर्फ अपने cordova.js अप

< स्क्रिप्ट src = "cordova.js" के लिए कदम> </script>

के रूप में पहली js फ़ाइल शामिल करने के लिए (विशेष रूप से यह सुनिश्चित कर लें यह नक्शे के ऊपर जेएस शामिल है)।यह सुनिश्चित करें कि शीघ्र ही एक बार पता चलता

+0

उपयोगी है, लेकिन एक संघर्ष होता है, जब इस स्क्रिप्ट को आपके द्वारा सुझाए गए अनुसार लोड किया जाता है, तो वेब सेवाएं लोड करने में असमर्थ होती हैं और न ही कोई त्रुटि दे रही हैं। समाधान क्या है? – developer

+0

मैं सेन्चा टच 2 का उपयोग कर रहा हूं, और Ext.ajax.request में इसका विरोध है। इससे कैसे बचें? – developer

+0

यह खतरनाक है, सावधान रहें। आप दौड़ की स्थिति में भाग ले रहे हैं जो आपके मामले में काम करते हैं लेकिन अन्य वातावरण में काम नहीं कर सकते हैं (उपयोगकर्ता की इंटरनेट गति, ब्राउज़र प्रकार और इसी तरह के आधार पर ...)। आपको पहले स्क्रिप्ट निष्पादन आदेश को पूरी तरह से पढ़ना और समझना चाहिए: http://www.html5rocks.com/en/tutorials/speed/script-loading/?redirect_from_locale=de – Timo

0

मैं पिछले स्क्रिप्ट शामिल होने के लिए

+0

यह खतरनाक है, सावधान रहें। आप दौड़ की स्थिति में भाग ले रहे हैं जो आपके मामले में काम करते हैं लेकिन अन्य वातावरण में काम नहीं कर सकते हैं (उपयोगकर्ता की इंटरनेट गति, ब्राउज़र प्रकार और इसी तरह के आधार पर ...)। आपको पहले स्क्रिप्ट निष्पादन आदेश को पूरी तरह से पढ़ और समझना चाहिए: http://www.html5rocks.com/en/tutorials/speed/script-loading/?redirect_from_locale=de – Timo