【问题标题】:Javascript/Google Maps causing PIE.htc errorsJavascript/Google Maps 导致 PIE.htc 错误
【发布时间】:2012-02-27 09:48:53
【问题描述】:

所有, 我有以下代码:

<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 时,出现以下错误:

用户代理:Mozilla/4.0(兼容;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) 时间戳:2012 年 2 月 22 日星期三 16:45:35 UTC 消息:Arg:Vector2D 中的非法输入字符串 线路:68 字符:63 代码: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>

任何想法为什么会导致错误?

【问题讨论】:

  • 这只发生在 IE8 中吗?您使用的是哪个版本的 PIE?您使用的是哪个版本的 GoogleMaps API?您还使用了哪些其他库(除了 PIE)?
  • @pete 它适用于 Firefox、Chrome、Safari 等,因此仅适用于 IE8。我正在使用 PIE 1.0 Beta 3 版(至少我的文件中是这么说的)。我在 Google Maps V3 上,我正在使用 jQuery,Modenizer 来命名一对。

标签: javascript google-maps


【解决方案1】:

您的 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 代码。

【讨论】:

  • 你为什么认为我的 var myStroes 在 null 前有两个逗号?我不明白你为什么会这样想?
  • 因为这条线:$jsData = $jsData . "new Store( $lat, $long, '$name' ),\n";
  • 是的,$lat、$long 和 name 都填充了我问题中的代码框。
  • 注意逗号放在字符串$jsData 的末尾,然后看看你用PHP 将它注入内联javascript 的位置:var myStores = [&lt;?php echo $jsData;?&gt;, null];。似乎会有两个逗号,除非您使用问题中未包含的一些代码删除一个逗号。我的答案中的备用 addLoadEvent 方法是否修复了 PIE.htc 错误?
  • 我没有剥离任何东西。我不确定为什么任何逗号都会导致问题。不, addLoadEvent 没有解决问题。但是,我确实出去下载了最新的 PIE.htc 文件,它不再给我错误了。
【解决方案2】:

【讨论】:

  • 没关系...您在我刷新页面之前添加了您的评论。很高兴这对你有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 2022-10-22
  • 2014-07-20
  • 2014-06-07
相关资源
最近更新 更多