IE错误-2147024882

Jay*_*rod 9 javascript internet-explorer google-maps

我正在开发一个服务器端的vb.net网页和谷歌地图的.aspx页面上的一些javascript.网页是一个很大的GIS,可以在某些县内映射出格鲁吉亚的所有区块组,因此在.js文件中大约有15MB的纯[纬度,经度]点.在chrome/firefox中,地图加载,然后加载脚本,触发回调以绘制它定义的多边形,并将多边形绘制到地图上.在IE中,地图被加载,当加载脚本时,控制台有一个SCRIPT14: error -2147024882在线1.除了地图上的多边形外,一切都正确显示..js文件的结构只是一个变量的声明.

var allPolys = [
    [
      //poly1 points
      [x1,y1],
      [x2,y2],
      ...
    ],
    [
      //next poly
      [x1,y1],
      ...
    ]
]
Run Code Online (Sandbox Code Playgroud)

^^是在.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);
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

在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 });
                }
            }
Run Code Online (Sandbox Code Playgroud)

can*_*elp 13

我相信我找到了这个错误的确切原因.

编辑:我相信这个错误是在IE 10中修复的

我的测试表明,IE将拒绝执行包含超过2 16 -3个数字的Javascript文件.因此,如果.js文件有65533个数字,IE将执行它.但如果它包含65534或更多数字,您将收到错误?2147024882.

我在这里提出了一个测试案例来证明这个问题:

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

我正在处理的网站从S3上托管的Javascript文件加载大量JSON数据.起初我以为这是由于IE中的一些Javascript源文件大小限制.但是一些测试显示,IE可以处理的.js文件远远大于引发这个神秘?2147024882错误的文件.

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


Sin*_*dre 2

就我的谷歌搜索而言,这似乎是一个“内存不足”问题:

“错误 -2147024882 没有足够的内存可用于执行操作。 - MAPI_E_NOT_ENOUGH_MEMORY(Microsoft Exchange Server 信息存储)

检查 for 循环的长度(multiPolys 和 allTracts)

还要检查字符串和子字符串的长度,它们可能太长