2012-05-23 11 views
5

हम Google मानचित्र का उपयोग कर रहे हैं और एक ऐसी समस्या की पहचान की है जो केवल IE8 (और संभवतः नीचे) में होती है। कार्यक्षमता एफएफ, क्रोम, आईई 9 में सही ढंग से काम करती है।IE8 में Google मानचित्र त्रुटि का कारण क्या है?

कोड कि त्रुटि के आसपास होता है:

google.load("maps", "3.x", { other_params: "sensor=false" }); 
    var mapdiv = null; 
    $(function() { 
     mapdiv = document.getElementById("map"); 
     map = new google.maps.Map(mapdiv, { 
      zoom: 1, 
      center: new google.maps.LatLng(6, 35), 
      disableDefaultUI: true, 
      mapTypeId: google.maps.MapTypeId.TERRAIN 
     }); 
     var latlngbounds = new google.maps.LatLngBounds(); 
इस लाइन पर

विशेष रूप से:

map = new google.maps.Map(mapdiv, { 
    zoom: 1, 
    center: new google.maps.LatLng(6, 35), 
    disableDefaultUI: true, 
    mapTypeId: google.maps.MapTypeId.TERRAIN 
}); 

और त्रुटि है:

वस्तु इस का समर्थन नहीं करता संपत्ति या विधि

मेरे पास आईई देव उपकरण के साथ थोड़ा सा खेल रहा है और यदि मैं को var x = जैसे किसी भी त्रुटि के साथ प्रतिस्थापित करता हूं, तो इसमें कोई त्रुटि नहीं है, इसलिए इससे मुझे विश्वास होता है कि map ऑब्जेक्ट वह अपराधी है जिसमें कुछ संपत्ति/विधि गुम है । हालांकि मुझे वास्तव में पता नहीं है कि map ऑब्जेक्ट कहां से आता है, मुझे लगता है कि यह google.load कॉल से लोड हो जाता है।

क्या किसी को पता है कि यहां क्या हो रहा है?

+2

देखें: http://stackoverflow.com/questions/9158238/why-js-function-name-conflicts-with-element-id –

उत्तर

9

लाइन कब:

map = new google.maps.Map(mapdiv, { zoom: 1, center: new google.maps.LatLng(6, 35), disableDefaultUI: true, mapTypeId: google.maps.MapTypeId.TERRAIN }); 

निष्पादित हो जाता है जावास्क्रिप्ट दुभाषिया गुंजाइश श्रृंखला जहां map घोषित किया जाता है की तलाश में ऊपर से गुजरने शुरू कर देंगे। चूंकि इसे स्थानीय रूप से घोषित नहीं किया गया है, यानी var map = ..., यह इसे आपके स्थानीय दायरे में नहीं मिला है, और अंत में यह वैश्विक दायरे में जोड़ा जाता है।

आपके मामले में map पहले से ही वैश्विक दायरे में window.map के रूप में परिभाषित किया गया है, क्योंकि यह आपके पृष्ठ पर div का आईडी है। सभी ब्राउज़रों में आपको एक त्रुटि संदेश नहीं दिखाई देता है, window.map एक नए google.maps.Map ऑब्जेक्ट पर सेट है। किसी कारण से, अच्छा या बुरा, IE8 आपको वैश्विक चर बनाने की अनुमति नहीं देगा जिसका नाम मौजूदा वैश्विक चर के साथ संघर्ष करता है जो कि DOM तत्व को संदर्भित करता है।

आप इस कई अलग अलग तरीकों को हल कर सकते हैं: आप map वैश्विक क्षेत्र में मौजूद है करने के लिए है, तो

  1. कुछ और
  2. के लिए एक स्थानीय var map

  3. बदलें map से अपने div की आईडी बनाएं , इसे window.map =...

    (3b) परिवर्तनीय नाम को उस व्यक्ति के रूप में बदलें जोके साथ संघर्ष नहीं करता है, उदा। myMap = new google.maps.Map(...