在Internet Explorer 11中加载巨大的数组会导致堆栈溢出

我有一个非常大的锯齿状数组的页面(生成)。 它不会在IE11中初始化; 我得到SCRIPT28: Out of stack space SCRIPT2343: Stack overflow at line: 1 。 我用随机数据将有问题的页面减少到了最低限度,这就是它的样子:

<html><body>
    <div id="info">
        Loading...
    </div>
    <script>

        var d = [];
        var i = 0;

        d[i++] = [
        "XHC_14",
        0
        ];

        d[i++] = [
        "ZXS_26",
        "UVT_27",
        "QML_3149",
        "MJO_3150",
        15993327
        ];

        d[i++] = [
        "VKG_3156",
        "ZEA_3157",
        "KZG_3159",
        "MNA_3162",
        "AKX_3163",
        "KLK_3164",
        618601
        ];

        // more array initialization ...

        info.innerHTML = "<h1>Ready!</h1>"; // this will only show if the initialization succeeded
    </script>
</body></html>

真实文件是〜500k行,重复约14k次的阵列初始化。 真正的文件在这里可用:ie11_stack_overflow_problem.zip

只有当数组初始化足够大时它才会崩溃。 我有各种各样的变异,包括把它放在一个函数里面,使它变成它自己的范围,但无济于事。 它适用于我测试的所有其他浏览器,包括XP上的IE8。 我的配置是Win7的IE 11.0.9600.17107(完全更新)。

任何人都可以找出为什么发生这种情况?


该文件是可怕的,是对Visual Studio和记事本++ ......甚至是IE11的死亡之吻。 你已经炸毁了口译员。

我通过使用这个工作

JSON.serialize(d)

在另一个浏览器中,然后将输出作为字符串粘贴到源文件中。

然后:

var jsonStr = '[[blablabla...I go on foreeeeeever]]';
var d=JSON.parse(jsonStr);

现在它在IE11中加载。

所以解决方案是将你的数据结构写成JSON字符串并解析它。

链接地址: http://www.djcxy.com/p/79117.html

上一篇: Loading huge array in Internet Explorer 11 cause stack overflow

下一篇: serialization