在AJAX应用程序中使用Openlayers绘制点要素时,IE8中的参数错误无效

我会请求一些帮助,因为我一直在努力解决仅在IE8中使用我的代码发生的问题。 您可以在http://www.europeontrack.com/test.html上查看说明问题的演示页面。正如您将注意到的,它可以很好地运行Firefox,Chrome,Safari,但在IE8中,它会在openlayers.js第684行,字符178中触发Javascript错误“无效参数”。 此页面首先初始化一个openlayers地图对象,然后声明一个空的cityLayer矢量图层,稍后我们将使用它来绘制点。 链接“show city list”异步调用http://www.europeontrack.com/cityList.html并将其插入DOM中。 cityList.html声明一个数组,其中存储了几个城市的名称,纬度和经度。 然后将此数组作为参数传递给showChities()函数,该函数在test.html中声明,如下所示:
function showCities(cities,layer) {
    var pointFeatures = [] ;
    for ( i = 0 ; i < cities.length ; i++) {
        pointFeatures[i] = new OpenLayers.Feature.Vector(
            newOpenLayers.Geometry.Point(cities[i]['long'],
                cities[i]'lat']).transform(
                map.displayProjection,map.baseLayer.projection));
        pointFeatures[i].attributes = { label: cities[i]['label'] };
    }
    cityLayer.addFeatures(pointFeatures);
    return false ;
}
在IE8中,只绘制'cities'数组中包含的第一个城市,然后浏览器抛出“Invalid Argument”错误。 你可以看看我的源代码。我想我已将其剥离到最低限度。我在这一点上陷入困​​境,试图解决这个问题。 预先感谢您的帮助。 Lothaire     
已邀请:
我已经看了它,可以使用公共OL构建重现错误。但是使用我自己的OL 2.9.1副本,它可以在IE和FF中使用。 我对下载的文件进行了少量修改,但仅限于弹出类,因此不应影响您的代码。尝试下载OpenLayers 2.9.1并查看您的应用是否适用于该版本。或者从调试版本的OL(未压缩)开始,并尝试查看哪行代码产生错误。不看缩小代码时容易得多。 :-)     
谢谢大家调查 - 但我很惭愧地说我在我的样式图的定义中犯了一个粗心的错误,这对大多数浏览器没有影响,除了IE8,这实际上是导致问题的原因。这一次我试图调试,看错了地方。 这是我的错误:
styleMap = new OpenLayers.StyleMap({
    'default':{
        strokeColor: "#FFFFFF",
        strokeOpacity: 1,
        strokeWidth: 2,
        fillColor: "#852C71",
        fillOpacity: 1,
        pointRadius: 4,
        pointerEvents: "visiblePainted",
        label : "${label}",                   
        fontColor: "#000000",
        fontSize: "10px",
        fontFamily: "Verdana",
        fontWeight: "bold",
        labelAlign: **"${align}",**
        labelXOffset: **"${xOffset}",**
        labelYOffset: "-10"
    }
});
我在styleMap中指定了2个变量($ {align},$ {xOffset}),在向矢量图层添加要素时,我没有传递任何值。这导致IE中断,而其他浏览器忽略它。我用固定值替换了这些变量,它解决了IE8问题。为我这个愚蠢的错误道歉。感谢您对此进行调查。 Lothaire     

要回复问题请先登录注册