1

我会请求一些帮助,因为我一直在努力解决仅在 IE8 中使用我的代码出现的问题。您可以在http://www.europeontrack.com/test.html上查看说明问题的演示页面。您会注意到,它在 Firefox、Chrome、Safari 上运行良好,但在 IE8 中,它会在 openlayers.js 第 684 行第 178 字符中触发 Javascript 错误“无效参数”。

此页面首先初始化一个 openlayers 地图对象并声明一个空的 cityLayer 矢量图层,我们稍后将使用它来绘制点。链接“显示城市列表”异步调用http://www.europeontrack.com/cityList.html并将其插入 DOM。cityList.html 声明了一个数组,其中存储了几个城市的名称、纬度和经度。然后将该数组作为参数传递给在 test.html 中声明的 showCities() 函数,如下所示:

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”错误。你可以看看我的源代码。我想我已经把它剥离到最低限度了。我被困在这一点上,试图解决这个问题。预先感谢您的帮助。

洛泰尔

4

2 回答 2

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 问题。为我这个愚蠢的错误道歉。感谢您调查它。

洛泰尔

于 2011-03-16T15:20:20.317 回答
0

我已经看过它,并且可以使用公共 OL 构建重现该错误。但是使用我自己的 OL 2.9.1 副本,它可以在 IE 和 FF 中运行。

我对下载的文件做了一些小的修改,但只在一个弹出类中,所以这不应该影响你的代码。尝试下载 OpenLayers 2.9.1 并查看您的应用程序是否适用于该版本。或者只是从 OL 的调试版本(未压缩)开始,然后尝试查看哪一行代码产生了错误。不查看缩小代码时要容易得多。:-)

于 2011-03-15T11:27:50.267 回答