Estou usando um arquivo de biblioteca JavaScript Direct Web Remoting (DWR) e estou recebendo um erro apenas no Safari (desktop e iPad)
Diz
Tamanho máximo da pilha de chamadas excedido.
O que significa exactamente este erro e pára completamente o processamento?
Também qualquer correção para o navegador Safari
(Na verdade, no iPad Safari
, ele diz
JS:execução excedeu o tempo limite
que presumo ser a mesma questão do call stack)
Isso significa que em algum lugar em seu código, você está chamando uma função que por sua vez chama outra função e assim por diante, até atingir o limite da pilha de chamadas.
Isto é quase sempre devido a uma função recursiva com um caso base que está't sendo cumprido.
Considere este código...
(function a() {
a();
})();
Aqui está a pilha depois de uma mão cheia de chamadas...
Como você pode ver, a pilha de chamadas cresce até atingir um limite: o tamanho da pilha codificada no navegador ou o esgotamento da memória.
Para o corrigir, assegure-se de que a sua função recursiva tem um caso base que é capaz de ser cumprido...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
Existe um loop recursivo algures no seu código (ou seja, uma função que eventualmente se chama a si própria uma e outra vez até a pilha estar cheia).
Os outros navegadores ou têm pilhas maiores (assim você ganha um timeout) ou eles engolem o erro por alguma razão (talvez uma tentativa mal colocada).
Use o depurador para verificar a pilha de chamadas quando o erro acontece.