0

在调用$.colorbox.resize();. 我已将问题缩小到该方法,没有它一切运行良好,尽管模态的大小错误。

Uncaught RangeError: Maximum call stack size exceeded
d.extend.type
d.extend.makeArray
d.fn.d.init
d
g.plugins.fn.clone
a.each.a.fn.(anonymous function)
g.plugins.fn.clone
a.each.a.fn.(anonymous function)
g.plugins.fn.clone
a.each.a.fn.(anonymous function)
g.plugins.fn.clone
a.each.a.fn.(anonymous function)
g.plugins.fn.clone
a.each.a.fn.(anonymous function)
g.plugins.fn.clone
a.each.a.fn.(anonymous function)
...

我只是在浏览器的控制台中创建了一些动态颜色框,而不是通过我通常的事件处理程序和方法运行。每次我尝试使用$.colorbox.resize()这些动态颜色框时,都会出现堆栈溢出。这让我认为该错误与显示和准备颜色框的任何自定义代码无关。

我正在使用 jQuery 1.5.2。

为什么会发生堆栈溢出,我该如何防止它发生?

更新

还有一些用于我的控制流的伪代码:

mouseClickHandler = function()
{
    async_method_1(function()
    {
        someMethod1()
    })
}

someMethod1 = function()
{
    async_method_2(function()
    {
        someMethod2()
    })
}
someMethod2 = function()
{
    $.colorbox.resize();
}

更新 2

正如我之前提到的,除了上面的代码之外,在控制台中创建颜色框也会导致堆栈溢出。例如,如果我在浏览器的控制台中输入以下两行,我仍然会得到溢出。

$.colorbox({html:'<h1>hello world</h1>'})
$.colorbox.resize()
4

1 回答 1

2

我自己弄清楚了这个问题。发生堆栈溢出是因为页面中包含两次颜色框。一旦我删除了第二个脚本标签,一切又恢复了。

没有理由为什么任何人都需要两次包含颜色框,但是对于不小心犯错误的可怜的开发人员来说,模糊的堆栈溢出并不是合理的惩罚:)。我知道彩盒开发人员使用 SO。也许,他可以设置冗余故障保险或throw new Error带有有用信息的信息。

于 2012-05-09T14:22:08.263 回答