ref: /superuser/92617/stop-never-ending-popup-alerts-in-firefox
Firefox ist besonders problematisch ...
Warnung! Vorbehalt! Führen Sie dies NICHT aus!
javascript:
while (true) alert("irritated and exhausted - yet?");
Dies wird "unendlich" und erschöpft KEIN internes Timeout, da das Skript die CPU-Zeit nicht schnell genug verbraucht. In FF 11 garantiert dies, dass es keine Abtreibungsmöglichkeiten für nicht reagierende Skripte gibt.
In frühen Browserversionen war es möglich und trivial, nur das fehlerhafte Skript ordnungsgemäß zu stoppen, indem manuelle Eingriffe vorgenommen wurden, ohne den gesamten Browser zu quaken und abzubrechen. Eine solche Kontrolle nicht zu haben, ist ein großer Konstruktionsfehler der Browsersoftware. Unangemessene Geschicklichkeit und Reflex sind erforderlich, um die manuelle Motormechanik der in der Referenz beschriebenen "Lösungen" zu beeinflussen.
Vorsichtsmaßnahme: Es ist möglich, dass Skripte "unendlich" werden, ohne Zeitüberschreitung UND ohne Eingabeaufforderungen vom Typ "Alarm". Diese sind besonders schädlich und nervig. Grundsätzlich laufen die Skripte langsam genug, so dass der CPU-Zeitzyklus etwa 20 Sekunden beträgt. wird über mehrere Minuten oder Stunden ausgedehnt oder ... vor dem Timeout durch Aussetzen der Ausführung bis zur Wiederaufnahme eines Ereignisauslösers. Anstatt die CPU-Zyklen zeitlich zu steuern, ist es für Skripte weitaus besser, bei der realen Taktung eine Zeitüberschreitung zu erzielen. (Immer , wie Sie können nicht abbrechen ein Skript , das zum Abrufen von Inhalten versucht - aber erfolglos - für den Aufbau einer Seite In FF sowohl die Adressleiste Tasten reloadund cancel/stop. Deaktiviert werden , obwohl die Lasche zumindest geschlossen werden kann) Normal Javascript Timeout()undsetInterval() Anrufe leiden nicht darunter und sind so konditioniert, dass ein manueller Eingriff möglich ist, um sie "elegant" abzubrechen.
Testumgebung für empirische Beobachtungen:
window.navigator.userAgent=
Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:11.0) Gecko/20100101 Firefox/11.0
PS. das Skript
for (i=1; i > 0; ++i);
wird schließlich bei einem Überlauffehler abgefangen, wenn ider maximal zulässige Wert überschritten wird.