我会请求一些帮助,因为我一直在努力解决仅在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
答案 0 :(得分:0)
我已经查看了它,可以使用公共OL构建重现错误。但是使用我自己的OL 2.9.1副本,它可以在IE和FF中使用。
我对下载的文件进行了少量修改,但仅限于弹出类,因此不会影响您的代码。尝试下载OpenLayers 2.9.1并查看您的应用是否适用于该版本。或者从调试版本的OL(未压缩)开始,并尝试查看哪行代码产生错误。不看缩小代码时容易得多。 : - )
答案 1 :(得分:0)
感谢大家调查 - 但我很惭愧地说我在我的样式图的定义中犯了一个粗心的错误,这对大多数浏览器都没有影响,除了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