javascript - IE错误-2147024882

标签 javascript internet-explorer google-maps

我正在开发一个网页,在服务器端使用 vb.net,在用于谷歌地图的 .aspx 页面上使用一些 javascript。该网页是一个很大的 GIS 东西,它绘制出某些县内格鲁吉亚的所有街区组,因此它在 .js 文件中大约有 15MB 的纯 [latitude,longitude] 点。在 chrome/firefox 中, map 加载,然后加载脚本触发回调绘制它定义的多边形,然后将多边形绘制到 map 上。在 IE 中, map 被加载,当脚本被加载时,控制台在第 1 行有一个 SCRIPT14: error -2147024882。除了 map 上的多边形之外,所有内容都正确显示。 .js 文件的结构只是几个变量的声明。

var allPolys = [
    [
      //poly1 points
      [x1,y1],
      [x2,y2],
      ...
    ],
    [
      //next poly
      [x1,y1],
      ...
    ]
]

^^ 是每个多边形在 .js 中的定义方式。这是一个大小问题,因为所有的点都在一个数组中吗?

映射代码:

            function drawPolys() {
                for (var i = 0; i < allTracts.length; i++) {
                    var tract = "new google.maps.Polygon({ strokeWeight: 0.7, path: [";
                    for (var j = 0; j < allTracts[i].length; j++)
                        tract += " new google.maps.LatLng(" + allTracts[i][j][0] + "," + allTracts[i][j][1] + "),";
                    tract = tract.substring(0, tract.length - 1) + "], map: map });";
                    eval(tract);
                }

                //this is all for other 'multipolygons' that are in some maps
                var colors = ['red', 'blue', 'green', 'orange', 'yellow', 'white'];

                for (var i = 0; i < multiPolys.length; i++) {
                    for (var j = 0; j < multiPolys[i].length; j++) {
                        var subTract = "new google.maps.Polygon({ strokeWeight: 1.5, strokeColor: '" + colors[i % colors.length] + "', fillColor: '" + colors[i % colors.length] + "', path: [";
                        for (var k = 0; k < multiPolys[i][j].length; k++)
                            subTract += " new google.maps.LatLng(" + multiPolys[i][j][k][0] + "," + multiPolys[i][j][k][1] + "),";
                        subTract = subTract.substring(0, subTract.length - 1) + "], map: map });";
                        eval(subTract);
                    }
                }
            }

在 Chrome 中,页面加载非常漂亮。

编辑: 没有 eval() 的新映射函数

            function drawPolys() {
                for (var i = 0; i < allTracts.length; i++) {
                    var path = [];
                    for (var j = 0; j < allTracts[i].length; j++)
                        path.push(new google.maps.LatLng(allTracts[i][j][0],allTracts[i][j][1]));
                    new google.maps.Polygon({ strokeWeight: 0.7, path: path, map: map });
                }

                var colors = ['red', 'blue', 'green', 'orange', 'yellow', 'white'];

                for (var i = 0; i < multiPolys.length; i++) {
                    var path = [];
                    for (var j = 0; j < multiPolys[i].length; j++) {
                        path[j] = [];
                        for (var k = 0; k < multiPolys[i][j].length; k++)
                            path[j].push(new google.maps.LatLng(multiPolys[i][j][k][0],multiPolys[i][j][k][1]));
                    }
                    new google.maps.Polygon({ strokeWeight: 1.5, strokeColor: colors[i % colors.length], fillColor: colors[i % colors.length], paths: path, map: map });
                }
            }

最佳答案

我相信我已经找到了这个错误的确切原因。

编辑:我相信此错误已从 IE 10 开始修复

我的测试表明,IE 将拒绝执行其中包含超过 216-3 个数字的 Javascript 文件。所以,如果一个 .js 文件有 65533 数字,IE 将执行它。但如果它包含 65534 或更多数字,您将得到错误 −2147024882

我在这里放了一个测试用例来演示这个问题:

http://ie-error-2147024882.s3.amazonaws.com/ie_error_-2147024882.html

我正在处理的网站从 S3 上托管的 Javascript 文件加载大量 JSON 数据。起初我认为这是由于 IE 中的某些 Javascript 源文件大小限制造成的。但是一些测试表明,IE 可以处理比引发这个神秘的 −2147024882 错误的文件大得多的 .js 文件。

在我的例子中,解决方法是在生成 .js 文件时将整数和 float 编码为字符串,并使用 parseInt 和 parseFloat 来解释它们。

关于javascript - IE错误-2147024882,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11833319/

相关文章:

Javascript 将对象中的嵌套函数绑定(bind)到根对象

javascript - JS 编码不能在一个以上的页面上工作

javascript - Angularjs-添加/删除动态 html 元素(下拉菜单)

javascript - IE designMode 显示显示 :none Divs

html - IE9 中滚动条的问题,位置 : fixed, 溢出:自动

google-maps - 您如何使用 ajax 和 json 在 google maps engine lite 中以编程方式创建图层

javascript - 侧面板中的 HTML 更改宽度

javascript - 在 IE8 中调整窗口大小时,JQuery/Javascript 无效参数脚本错误

jquery - 将 Google map 加载到 Colorbox AJAX 加载的内容中

javascript - 为什么当我加载 google js api 时出现 "google is not defined "