0

を呼び出した後、Firefox と Chrome (およびおそらく他のすべて) でスタック オーバーフローが発生しています$.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

前述したように、上記のコードとは別にコンソールでカラーボックスを作成すると、スタック オーバーフローも発生します。たとえば、ブラウザのコンソールに次の 2 行を入力すると、やはりオーバーフローが発生します。

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

1 に答える 1

2

私は自分で問題を理解しました。colorbox がページに 2 回含まれていたため、スタック オーバーフローが発生していました。2 番目のスクリプト タグを削除すると、すべてが桃色に戻りました。

colorbox を 2 回含める必要がある理由はありませんが、あいまいなスタック オーバーフローは、誤ってミスを犯した貧弱な開発者への罰として正当化されません :)。カラーボックスの開発者が SO を使用していることは知っています。throw new Errorおそらく、彼は冗長フェイルセーフまたは役立つメッセージを入れることができます.

于 2012-05-09T14:22:08.263 に答える