我有一个(生成的)页面,其中包含一个非常大的锯齿状数组。它没有在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(完全更新)。
有人能弄清楚为什么会这样吗?
答案 0 :(得分:4)
该文件非常可怕,是Visual Studio和Notepad ++ ......以及IE11的死亡之吻。你搞砸了翻译。
我使用
让这个工作JSON.serialize(d)
在另一个浏览器中,然后将输出作为字符串粘贴到源文件中。
然后:
var jsonStr = '[[blablabla...I go on foreeeeeever]]';
var d=JSON.parse(jsonStr);
现在它在IE11中加载。
因此,解决方案是将您的数据结构作为JSON字符串编写并解析它。