2012-02-24 21 views
5

所有, 我有下面的代碼:的JavaScript /谷歌地圖造成PIE.htc錯誤

<script type="text/javascript"> 
function Store(lat, long, text) 
{ 
    this.latitude = lat; 
    this.longitude = long; 
    this.html = text; 
} 

var myStores = [<?php echo $jsData;?>, null]; 
addLoadEvent(loadMap); 

這填入下面的代碼:

$lat = $post->latitude; 
$long = $post->longitude; 
$post_id = $post->ID; 
$get_post_info = get_post($post_id); 
$name = $get_post_info->post_title; 
$jsData = $jsData . "new Store($lat, $long, '$name'),\n"; 

我頁面加載罰款沒有JavaScript部分。然而,當我添加的JavaScript我收到以下錯誤:

 
User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; MS-RTC LM 8; AskTbAD2/5.14.1.20007) 
Timestamp: Wed, 22 Feb 2012 16:45:35 UTC 

Message: Arg: Illegal input string in Vector2D 
Line: 68 
Char: 63 
Code: 0 
URI: http://localhost/wordpress/wp-content/themes/parallelus-mingle/assets/css/PIE.htc 

我居然把範圍縮小,甚至進一步,這行是導致錯誤:

addLoadEvent(loadMap); 

下面是完整的代碼addLoadEvent(loadMap):

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 
function addLoadEvent(func) { 
var oldonload = window.onload; 
if (typeof window.onload != 'function'){ 
    window.onload = func 
} else { 
    window.onload = function() { 
     oldonload(); 
     func(); 
    } 
} 
} 

var map, 
    infowin=new google.maps.InfoWindow({content:'moin'}); 
function loadMap() 
{ 
    map = new google.maps.Map(
    document.getElementById('map'), 
    { 
     zoom: 12, 
     mapTypeId:google.maps.MapTypeId.ROADMAP, 
     center:new google.maps.LatLng(<?php echo $_SESSION['pav_event_latitude']; ?>, 
            <?php echo $_SESSION['pav_event_longitude']; ?>) 
    }); 

    addPoints(myStores); 
} 

function addPoints(points) 
{ 
    var bounds=new google.maps.LatLngBounds(); 
    for (var p = 0; p < points.length; ++p) 
    { 
    var pointData = points[p]; 
    if (pointData == null) {map.fitBounds(bounds);return; } 
    var point = new google.maps.LatLng(pointData.latitude, pointData.longitude); 
    bounds.union(new google.maps.LatLngBounds(point)); 
    createMarker(point, pointData.html); 
    } 
    map.fitBounds(bounds); 

} 

var number = 2; // or whatever you want to do here 
function createMarker(point, popuphtml) 
{ 
    var popuphtml = "<div id=\"popup\">" + popuphtml + "<\/div>"; 
    var marker = new google.maps.Marker(
    { 
     position:point, 
     map:map, 
     icon:'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld='+number+'|FF776B|000000', 
     shadow:'https://chart.googleapis.com/chart?chst=d_map_pin_shadow' 
    } 
); 
    google.maps.event.addListener(marker, 'click', function() { 
     infowin.setContent(popuphtml) 
     infowin.open(map,marker); 
    }); 

} 
</script> 

任何想法爲什麼會導致錯誤?

+0

這是隻發生在IE8?你使用哪種版本的PIE?您使用的是哪個版本的GoogleMaps API?你還使用了其他什麼庫(除了PIE)? – pete 2012-02-26 23:32:40

+0

@pete它適用於Firefox,Chrome,Safari等,只是IE8。我正在使用PIE的1.0版本Beta 3(至少這是它在我的文件中說的)。我在谷歌地圖V3上,我使用jQuery,Modenizer來命名一對夫婦。 – user1048676 2012-02-27 01:17:36

回答

3

看起來您的addLoadEvent()不能正常工作,並且正在將您的空參數列表loadMap()發送到PIE.htc onload事件方法。另外,我相信函數的typeof實際上會返回object而不是function。無論哪種方式,嘗試在地方你的函數的下降這一點:

function addLoadEvent(func) { 
    if (window.addEventListener) { 
     window.addEventListener('load', func, false); 
    } else if(window.attachEvent) { 
     window.attachEvent('onload', func); 
    } 
} 

另一種選擇,這將確保它在所有的瀏覽器,是使用jQuery的$(document).ready()domReady,或其他一些等價的。

編輯: 另外,該線路:

var myStores = [<?php echo $jsData;?>, null]; 

將結束與兩個逗號,null之前,除非你在你原來的問題留下了一些PHP代碼。

+0

爲什麼你認爲我的var myStroes在null之前以兩個逗號結尾?我不明白你爲什麼這麼想? – user1048676 2012-02-27 01:15:13

+0

因爲這一行: '$ jsData = $ jsData。 「新的商店($ lat,$ long,'$ name'),\ n」;' – 2012-02-27 01:17:07

+0

是的,$ lat,$ long和name都會填充我的問題中的代碼框。 – user1048676 2012-02-27 01:20:06