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

Loading huge array in Internet Explorer 11 cause stack overflow

本文关键字:数组 堆栈 栈溢出 巨大 Explorer Internet 加载      更新时间:2023-09-26

我有一个(生成的)页面,其中包含一个非常大的锯齿数组。它不会在IE11中初始化;我得到SCRIPT28: Out of stack spaceSCRIPT2343: 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和notepad++的死亡之吻…还有IE11。你已经炸毁了解释器。

我使用

让它工作
JSON.serialize(d)

,然后将输出作为字符串粘贴到源文件中。

:

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

现在它在IE11中加载了。

解决方案是将数据结构写成JSON字符串并解析