2013-04-26 56 views
0

我使用XSLT將XML文件轉換爲HTML。xsl中的javascript用於從xml文件生成Google Maps

XML文件具有關於空間座標的信息,所以我想用它們來使用Google Maps API生成地圖。

爲了做到這一點,我編寫了一個javascript,並將其嵌入到我的XSLT中。此代碼工作正常在Internet Explorer和谷歌Chrome,但它沒有在Mozilla工作火狐我無法找到原因...

的JavaScript是這樣的:

<script><![CDATA[ 
    function LoadMap(div_map, szminx, szmaxx, szminy, szmaxy) { 
     var minx, maxx, miny, maxy; 

     minx=parseFloat(szminx); 
     maxx=parseFloat(szmaxx); 
     miny=parseFloat(szminy); 
     maxy=parseFloat(szmaxy); 

     if (GBrowserIsCompatible() && !isNaN(minx) && !isNaN(maxx) && !isNaN(miny) && !isNaN(maxy)) { 
      var d; 
      var zoomLevel;    
      var mapSize = new google.maps.Size(250,250, "px", "px"); 

      var centreX = minx+(maxx-minx)/2; 
      var centreY = miny+(maxy-miny)/2; 

      var map = new google.maps.Map (document.getElementById(div_map), {draggableCursor:"crosshair", size:mapSize}); 
      map.setCenter(new google.maps.LatLng(centreY,centreX)); 
      map.addControl(new google.maps.SmallMapControl()); 

      d=maxx-minx; 
      if (d<maxy-miny) {d=maxy-miny;} 

      if (d<0.0000001) {d=360;} 

      zoomLevel=parseInt(-Math.log(d)/Math.log(2)+8);  

      map.setZoom(zoomLevel); 
     } 
    } 
]]></script> 

我在這些行中使用XSLT調用它:

... 
<td width="250px"> 
    <div id="map" style="width:250px; height:250px; display:block;"> 
    </div> 
    <script type="text/javascript"> LoadMap("map", 
     <xsl:value-of select="west/coord"/>, 
     <xsl:value-of select="east/coord"/>, 
     <xsl:value-of select="south/coord"/>, 
     <xsl:value-of select="north/coord"/>); 
    </script> 
</td> 
... 

想法?

編輯

的問題似乎是在其中加入了谷歌API的XSLT的一部分。 在我的XSLT它嵌入這樣的:

<script src="http://maps.google.com/maps?file=api&amp;hl=ca&amp;v=2&amp;sensor=false&amp;key=myKey" type="text/javascript"/> 

正如我所說,它運作良好,在Chrome和IE

如果我把的JavaScript在一個靜態的HTML,我要修改這一行動傳感器=如谷歌API網頁描述假:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=myKey&sensor=false" type="text/javascript"> 

具有這些修飾的代碼在所有瀏覽器運行良好,但這種變化不被XSLT承認當年。如果我在我的XSLT中添加此版本的行,所有瀏覽器都會返回此錯誤:

XML解析錯誤:格式不正確 指向sensor = false位置。

+0

'不工作'是指......? – collapsar 2013-04-26 11:16:56

+0

不工作意味着地圖未在Firefox中顯示。控制檯顯示如下:InvalidStateError:試圖使用一個不可用或不再可用的對象。 TypeError:google.maps.Size不是構造函數。 – ogogu 2013-04-26 11:20:02

+1

我建議首先嚐試一下Javascript代碼是否可以在靜態HTML文檔中與Mozilla協同工作。如果可行,但在使用XSLT生成HTML時不起作用,那麼我們需要在XSLT的上下文中查看它。但是,目前在新的google.maps.Size(250,250,「px」,「px」)上拋出的錯誤,它看起來是一個純Javascript問題或Google maps API的嵌入問題,而您發佈的XSLT只是複雜化讓我們找到錯誤的東西。可能與http://stackoverflow.com/questions/16056065/google-maps-not-loading-over-https-on-firefox有關。 – 2013-04-26 11:39:27

回答

0

好像你忘了逃跑,去年符號sensor=true前 - 所以&傳感器&放大器,傳感器,像這樣:

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=myKey&amp;sensor=false" type="text/javascript"> 

有意義的錯誤了。

+0

是的,這是我第一次想到的,但如果我做出這種改變的結果是相同的,Google API在IE和Chrome中工作,但不在FireFox中。但是,如果您看一下API文檔,那麼這就是調用Google Maps API所記錄的方式。我認爲@Martin_Honnen的最後評論是正確的線索,也許一個可能的解決方案是這樣的:https://gist.github.com/bzerangue/2185400 – ogogu 2013-04-29 07:52:53