2012-07-18 7 views
7

मैं वेब वर्कर में नेविगेटर.जोलोकेशन के लिए अपना कोड ले जाने की कोशिश कर रहा हूं।वेब वर्कर्स में एचटीएमएल 5 नेविगेटर.जोलोकेशन

मैं क्रोम और सफारी लेकिन हो रही 'अनिर्धारित' पर साथ इसे करने की कोशिश

वर isGPSSupported = navigator.geolocation;

हताश होकर ... वे विनिर्देश है कि 'नाविक' ऑब्जेक्ट वेब कार्यकर्ताओं में समर्थन किया जाना चाहिए में कहा ...

मेरे कोड के नीचे है:

index.js

var gpsWorker = new Worker("app/gpsworker.js"); 

gpsWorker.onmessage = function (e) { 
    alert(e.data); 
}; 

gpsWorker.postMessage("Start GPS!"); 

gpsWorker.onerror = function (e) { 
    alert("Error in file: " + e.filename + "\nline: " + e.lineno + "\nDescription: " + e.message); 
}; 

gpsworker .js

self.onmessage = function (e) { 
    initGeoLoc(); 
} 

function initGeoLoc() { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function (position) { 
      self.postMessage("Got position!"); 
     }); 
    } else { 
     self.postMessage("GPS is not supported on this platform."); 
    } 
} 

गलत पर किसी भी संकेत की सराहना की जाएगी।

उत्तर

0

क्रोम में यह निरीक्षण करने से यह यह निश्चित रूप से प्रकट होता है जियोलोकेशन विशेषता नहीं है:

WorkerNavigator 
appName: "Netscape" 
appVersion: "5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1" 
onLine: true 
platform: "Win32" 
userAgent: "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1" 
__proto__: WorkerNavigator 

क्रोम में, आप अपने कार्यकर्ताओं में एक ब्रेकपाइंट सेट कर सकते हैं। मैं आपकी त्रुटियों के लिए ऐसा करने की अनुशंसा करता हूं, यह बेहद सहायक है।

4

'नेविगेटर' ऑब्जेक्ट समर्थित है, हालांकि इसमें केवल चार गुण हैं: ऐपनाम, ऐपवर्जन, उपयोगकर्ता एजेन्ट, और प्लेटफ़ॉर्म।

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

navigator.geolocation.watchPosition(function(position) { 
    document.getElementById('currentLat').innerHTML = position.coords.latitude; 
    document.getElementById('currentLon').innerHTML = position.coords.longitude; 
}); 
+3

लेकिन यह काम नहीं करता है अगर हम ब्राउज़र को कम करते हैं या स्क्रीन – narush

8

मैं समान प्रश्न तुम्हारा के रूप में पहले था और a related question पूछा। अब मेरा मानना ​​है कि मेरे पास आपके प्रश्न का उत्तर है (और मेरे संबंधित प्रश्नों में से एक भी)।

navigator.geolocation केवल मुख्य धागे में नेविगेटर से संबंधित है, लेकिन कार्यकर्ता धागे में नेविगेटर से संबंधित नहीं है।

मुख्य कारण यह है कि भले ही कार्यकर्ता थ्रेड में नेविगेटर मुख्य थ्रेड में बिल्कुल समान दिखता है, फिर भी उन दो नेविगेटर के पास सी ++ पक्ष पर स्वतंत्र कार्यान्वयन होते हैं। यही कारण है कि कार्यकर्ता थ्रेड में navigator.geolocation समर्थित नहीं है।

संबंधित कोड क्रोमियम कोड में Navigator.idl और WorkerNavigator.idl में है। आप देख सकते हैं कि वे .idl फ़ाइलों में दो स्वतंत्र इंटरफेस हैं। और उनके पास बाध्यकारी के सी ++ पक्ष पर स्वतंत्र कार्यान्वयन हैं। नेविगेटर DOMWindow की विशेषता है, जबकि वर्कर नॅविगेटर WorkerGlobalScope की विशेषता है।

हालांकि, जावास्क्रिप्ट पक्ष पर, उनके पास एक ही नाम है: नेविगेटर। चूंकि दो नेविगेटर दो अलग-अलग क्षेत्रों में हैं, इसलिए कोई नाम संघर्ष नहीं है। लेकिन जावास्क्रिप्ट में एपीआई का उपयोग करते समय, आम तौर पर लोग समान नाम के समान मुख्य और कार्यकर्ता धागे पर समान व्यवहार की अपेक्षा करते हैं। इस तरह अस्पष्टता होती है।

-1

क्या यह मुख्य वेब थ्रेड पोस्टमेस() में आपके वेबवर्कर में नया स्थान देखने के लिए पर्याप्त नहीं होगा?

+0

बंद हो जाती है, जबकि यह लिंक प्रश्न का उत्तर दे सकता है, यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/12297275) –

+0

आशीष, उत्तर उपरोक्त पहली पंक्ति में है। लिंक पृष्ठभूमि प्रदान करते हैं कि भविष्य का समाधान क्या होना चाहिए। चीयर्स रिचर्ड –

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