2013-10-24 118 views
0

我已成功在Chrome和Firefox中創建了一個顯示kmz文件,單個標記和用戶當前位置的地圖。加載的kmz文件基於從外部域使用php檢索到的信息。目前,當我使用IE 9加載頁面時,它會成功加載,我可以瀏覽地圖並使用其他控件。Google Maps API不會在Internet Explorer 9中刷新時加載

刷新時會出現問題。地圖不出來。頁面上的其他所有內容都會成功加載我認爲這可能與標記有關,但是當我將它刪除時,我仍然遇到同樣的問題。我還通過一個程序運行我的代碼來捕捉尾隨逗號和缺少分號。沒有!另一個奇怪的是IE9調試器沒有錯誤。

這裏是下面的代碼:

 var map; 
     var cstage; 
     var cFor; 
     var KML = new Array(); 
     var KML_def; 
     var FI; 
     var Fnum; 
     var OI; 
     var Onum; 
     var ObsV = new Array(); //observed values 
     var ObsT = new Array(); //observed time 
     var ForV = new Array(); //forecasted values 
     var ForT = new Array(); //forecasted time 
     var myKmlOptions = { 
      preserveViewport: true 
     }; 

     //gets the current forecast 
     function getForecast() { 
      $.ajax({ 
       type: "GET", 
       url: "/centralia/proxy.php", 
       data: { requrl: "http://water.weather.gov/ahps2/hydrograph_to_xml.php?gage=cenw1&output=xml" }, 
       dataType: 'xml', 
       success: function(xml) { parseXml(xml); } 
      }); 
     } 

     //parses the xml forecast data to get the observed and forecasted values 
     function parseXml(xml) { 
      var $xml = $(xml); 
      var i; 

      i = 1; 
      Fnum = 0; //forecasted 
      Onum = 0; //observed 
      FI = 0; 

      cFor = Date.now(); 
      $xml.find("forecast").children("datum").each(function() { 
       ForV[i] = $(this).children("primary").text(); 
       var year = $(this).children("valid").text().substr(0, 4); 
       var month = $(this).children("valid").text().substr(5, 2); 
       var day = $(this).children("valid").text().substr(8, 2); 
       var hour = $(this).children("valid").text().substr(11, 2); 
       var min = $(this).children("valid").text().substr(14, 2); 
       var sec = $(this).children("valid").text().substr(17, 2); 
       ForT[i] = new Date(Date.UTC(year, month - 1, day, hour, min, sec)); 
       i = i + 1; 
       Fnum = Fnum + 1; 
      }); 

      i = 0; 
      $xml.find("observed").children("datum").each(function() { 
       ObsV[i] = $(this).children("primary").text(); 
       var year = $(this).children("valid").text().substr(0, 4); 
       var month = $(this).children("valid").text().substr(5, 2); 
       var day = $(this).children("valid").text().substr(8, 2); 
       var hour = $(this).children("valid").text().substr(11, 2); 
       var min = $(this).children("valid").text().substr(14, 2); 
       var sec = $(this).children("valid").text().substr(17, 2); 
       ObsT[i] = new Date(Date.UTC(year, month - 1, day, hour, min, sec)); 
       i = i + 1; 
       Onum = Onum + 1; 
      }); 

      cstage = ObsV[0]; 
      cFor = ObsT[0]; 

      //format time 
      var c_mins = cFor.getMinutes(); 
      var c_Hrs = cFor.getHours(); 
      var a_p = ""; 

      if (c_Hrs < 12) { 
       a_p = "AM"; 
      } 
      else { 
       a_p = "PM"; 
      } 
      if (c_Hrs === 0) { 
       c_Hrs = 12; 
      } 
      if (c_Hrs > 12) { 
       c_Hrs = c_Hrs - 12; 
      } 

      c_mins = c_mins + ""; 

      if (c_mins.length == 1) { 
       c_mins = "0" + c_mins; 
      } 

      //write out values to html div 
      $("#forcastVal").text(cstage.concat(" ft")); 
      $("#forcastDat").text(cFor.getMonth() + '/' + cFor.getDate() + '/' + cFor.getFullYear() + ' ' + c_Hrs + ':' + c_mins + ' ' + a_p); 
      $("#ForIndicator").text("(observed value)"); 
      setMenu(); 
     } 

     //initialize function 
     function initialize() { 

      var myOptions = 
     { 
      zoom: 8, 
      mapTypeId: google.maps.MapTypeId.HYBRID 

      // sets the type of map to be displayed 
      // HYBRID - displays a transparent layer of major streets on satellite images 
      // ROADMAP - displays a normal street map 
      // SATELLITE - displays satellite images 
      // TERRAIN - displays maps with physical features such as terrain 
     }; 
      map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
      KML_def = new google.maps.KmlLayer('https://dl.dropboxusercontent.com/u/7710611/Flood_Poly_161ft.kml'); 

      //add a marker for the station 
      var myLatLng = new google.maps.LatLng(46.711667, -122.9775); 
      var Marker_CenPoint = new google.maps.Marker({ 
       position: myLatLng, 
       map: map, 
       title: 'Chehalis River at Centralia' 
      }); 

      KML_def.setMap(map); 
      Marker_CenPoint.setMap(map); 

      Marker_CenPoint.info = new google.maps.InfoWindow({ 
       content: '<a href="http://water.weather.gov/ahps2/hydrograph.php?wfo=sew&gage=cenw1" target="_blank">Chehalis River at Centralia</a>' 
      }); 

      google.maps.event.addListener(Marker_CenPoint, 'click', function() { 
       Marker_CenPoint.info.open(map, Marker_CenPoint); 
      }); 

      //initial kmz load (all kmz files) 
      KML[1] = new google.maps.KmlLayer('1.kml', myKmlOptions); 
      KML[2] = new google.maps.KmlLayer('2.kml', myKmlOptions); 
      KML[3] = new google.maps.KmlLayer('3.kml', myKmlOptions); 
      KML[4] = new google.maps.KmlLayer('4.kml', myKmlOptions); 
      KML[5] = new google.maps.KmlLayer('5.kml', myKmlOptions); 
      KML[6] = new google.maps.KmlLayer('6.kml', myKmlOptions); 
      KML[7] = new google.maps.KmlLayer('7.kml', myKmlOptions); 
      KML[8] = new google.maps.KmlLayer('8.kml', myKmlOptions); 
      KML[9] = new google.maps.KmlLayer('9.kml', myKmlOptions); 
      KML[10] = new google.maps.KmlLayer('10.kml', myKmlOptions); 
      KML[11] = new google.maps.KmlLayer('11.kml', myKmlOptions); 
      KML[12] = new google.maps.KmlLayer('12.kml', myKmlOptions); 
      KML[13] = new google.maps.KmlLayer('13.kml', myKmlOptions); 
      KML[14] = new google.maps.KmlLayer('14.kml', myKmlOptions); 

      //add current location marker 
      var myloc = new google.maps.Marker({ 
       clickable: false, 
       icon: new google.maps.MarkerImage('//maps.gstatic.com/mapfiles/mobile/mobileimgs2.png', 
        new google.maps.Size(22, 22), 
        new google.maps.Point(0, 18), 
        new google.maps.Point(11, 11)), 
       shadow: null, 
       zIndex: 999, 
       map: map 
      }); 

      if (navigator.geolocation) { 
       navigator.geolocation.getCurrentPosition(function(pos) { 
        var me = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude); 
        myloc.setPosition(me); 
       }); 
      } 
      else { 
       alert("Geolocation is not available"); 
      } 

      //get current forecast 
      getForecast(); 

     } 
function twentyOFour(LNo, cell) { 
      //loop through all cells and change color 
      //for (k = 1; 4; k++) { 
      var x = document.getElementById("t1").getElementsByTagName("td"); 
      x[0].style.backgroundColor = "#dcdcdc"; 
      x = document.getElementById("t2").getElementsByTagName("td"); 
      x[0].style.backgroundColor = "#dcdcdc"; 
      x[1].style.backgroundColor = "#dcdcdc"; 
      x[2].style.backgroundColor = "#dcdcdc"; 
      x[3].style.backgroundColor = "#dcdcdc"; 
      x = document.getElementById("t3").getElementsByTagName("td"); 
      x[0].style.backgroundColor = "#dcdcdc"; 
      x[1].style.backgroundColor = "#dcdcdc"; 
      x[2].style.backgroundColor = "#dcdcdc"; 
      x = document.getElementById("t4").getElementsByTagName("td"); 
      x[0].style.backgroundColor = "#dcdcdc"; 
      x[1].style.backgroundColor = "#dcdcdc"; 
      x[2].style.backgroundColor = "#dcdcdc"; 
      x[3].style.backgroundColor = "#dcdcdc"; 
      x[4].style.backgroundColor = "#dcdcdc"; 
      x[5].style.backgroundColor = "#dcdcdc"; 
      //document.getElementById("forcastCont").innerHTML; 


      KML_def.setMap(null); 
      for (var i = 1; i < 15; i++) { 
       if (i == LNo) { 
        KML[i].setMap(map); 
        cell.style.backgroundColor = "#F0E68C"; 
       } 
       else { 
        KML[i].setMap(null); 
       } 
      } 
     } 

我懷疑這事做的代碼的時間,但我不知道。我所有的Google搜索都會顯示最初無法加載但會刷新的地圖。我遇到了完全相反的情況。任何幫助將不勝感激!我希望我給了足夠的細節,我是一名初學者程序員。謝謝。

+1

如果您發佈鏈接到實際站點,調試這樣的問題就容易得多。 JSFiddle也可以工作。 –

+0

我將網站添加到問題中。謝謝。 – user2917487

回答

0

我發現了Internet Explorer中正在發生的事情。我懷疑這些功能和任務是不按順序執行的,但我不知道在哪裏尋找它。最後,我在Google地圖上添加了一個監聽器。當地圖變爲空閒時,監聽器就會啓動,換句話說,它完全加載完成。將此添加到第104行。

google.maps.event.addListenerOnce(map, 'idle', function(){ 
     getForecast(); 
}); 

這樣腳本的其餘部分等待地圖完成加載。像魅力一樣工作!謝謝提醒夥計。我仍然不知道爲什麼這可以在Chrome和Firefox中使用,但不在IE中...

+0

什麼是「104線」? :) –

0

在F12工具中檢查你的網絡瀑布,看看你是否真的在請求數據,或者這種404的東西是我的第一件事。 你可能在瀏覽器中有數據緩存或類似的東西。如果網絡標籤無助於確定使用Fiddler查看原始請求。

的錯誤不會在調試器中顯示出來,但控制檯;)

我會再設置一些斷點的關鍵位置和觀察的變量和單步執行代碼,看看會發生什麼。

希望這有助於你朝正確的方向發展。

+0

我看着網絡瀑布。哇,我不知道你能做到這一點。第一次加載一切;按鈕圖像,谷歌API和圖像,它通過身份驗證等。有130項。當我刷新時,只列出了11個項目。它可能是它試圖從緩存中加載它不應該是的東西。如何去找這裏的錯誤? – user2917487

+0

如果緩存了,你會看到304的Http狀態不是200.瀑布應該顯示。如果不是在Fiddler中嘗試更多信息。還要確保檢查控制檯是否有任何JS錯誤。異常可能導致腳本不再執行。 –

相關問題