Ich verwende eine Direct Web Remoting (DWR) JavaScript-Bibliotheksdatei und erhalte nur in Safari (Desktop und iPad) einen Fehler
Er lautet
Maximale Größe des Aufrufstapels überschritten.
Was genau bedeutet dieser Fehler, und wird die Verarbeitung vollständig abgebrochen?
Gibt es auch eine Lösung für den Safari
-Browser (Auf dem iPad Safari
heißt es nämlich
JS:Ausführung hat Timeout überschritten
was vermutlich das gleiche Problem mit dem Aufrufstapel ist)
Das bedeutet, dass Sie irgendwo in Ihrem Code eine Funktion aufrufen, die wiederum eine andere Funktion aufruft und so weiter, bis Sie die Grenze des Aufrufstapels erreichen.
Das liegt fast immer an einer rekursiven Funktion mit einem Basisfall, der nicht erfüllt wird.
Betrachten Sie diesen Code...
(function a() {
a();
})();
Hier ist der Stack nach einer Handvoll von Aufrufen...
Wie Sie sehen können, wächst der Aufrufstapel, bis er an eine Grenze stößt: die im Browser fest kodierte Stapelgröße oder die Erschöpfung des Speichers.
Um dies zu beheben, stellen Sie sicher, dass Ihre rekursive Funktion einen Basisfall hat, der erfüllt werden kann...
(function a(x) {
// The following condition
// is the base case.
if ( ! x) {
return;
}
a(--x);
})(10);
Dies kann manchmal auftreten, wenn Sie versehentlich dieselbe JavaScript-Datei zweimal importieren/einbetten; es lohnt sich, dies auf der Registerkarte "Ressourcen" des Inspektors zu überprüfen.
Irgendwo in Ihrem Code befindet sich eine rekursive Schleife (d. h. eine Funktion, die sich selbst immer wieder aufruft, bis der Stack voll ist).
Andere Browser haben entweder größere Stacks (so dass Sie stattdessen eine Zeitüberschreitung erhalten) oder sie schlucken den Fehler aus irgendeinem Grund (vielleicht eine schlecht platzierte try-catch).
Verwenden Sie den Debugger, um den Aufrufstapel zu überprüfen, wenn der Fehler auftritt.