Angenommen, ich habe dies versehentlich geschrieben:
do { } while (true);
... und dann lief es. Gibt es neben dem Beenden Ihres Browsers eine Möglichkeit, die Ausführung von Javascript zu stoppen (entspricht Strg + Pause in Basic oder Strg + C)?
Normalerweise fragt Ihr Browser nach etwa 30 Sekunden, ob Sie das lang laufende Skript stoppen möchten, aber dies passiert nicht immer (wie ich gerade herausgefunden habe)!
Zu for (i=1; i > 0; ++i);
Ihrer Information : Eine einfache Schleife wie diese führt dazu, dass mein Browser abstürzt (Firefox 3.5b4). Ich habe keine Lust zu testen, ob es eines meiner Add-Ons ist. Ein kontinuierlicher Neustart meines Browsers ist nicht meine Vorstellung von einem lustigen Montagabend.
javascript
nickf
quelle
quelle
Antworten:
Zumindest mit Chrome können Sie möglicherweise die einzelne Registerkarte und nicht die gesamte Anwendung löschen.
Randolpho hat mich auch darüber informiert, dass IE8 ähnliche Funktionen hat.
quelle
x
Schaltfläche neben dem Namen der Registerkarte. Es scheint zu funktionieren, obwohl ich nicht sicher bin, warum der erste Klick nicht registriert ist.Ich verwende Chome Version 45.0.2454.101
Klicken Sie oben rechts im Hamburger-Menü auf Weitere Tools> Task-Manager und beenden Sie die Registerkarte von dort aus. Dies ist der Fall, wenn der Versuch, die Registerkarte zu schließen, fehlschlägt. Andernfalls wird es durch ein einfaches "X" auf der Registerkarte beendet.
quelle
Update 2018:
Wenn Sie in Chrome 67 die DevTools geöffnet haben ( F12), können Sie die Endlosschleife beenden, ohne die gesamte Registerkarte zu beenden:
https://developers.google.com/web/updates/2018/04/devtools#stop
quelle
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
reload
undcancel/stop
. Deaktiviert werden , obwohl die Lasche zumindest geschlossen werden kann) Normal JavascriptTimeout()
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
i
der maximal zulässige Wert überschritten wird.quelle
Wenn Sie Chrome verwenden, können Sie den nicht reagierenden Tab leicht töten.
Führen Sie die folgenden Schritte aus, wenn eine unendliche JavaScript-Schleife aufgetreten ist:
1.Wenn Sie bereits eine andere Registerkarte geöffnet haben, gehen Sie auf diese Registerkarte oder öffnen Sie eine neue
2. Drücken Sie "Umschalt + Esc", um den Task-Manager von Chrome zu öffnen
3.Finden Sie Ihre Registerkarte in der Liste (sollte sich mit dem meisten Speicherverbraucher in der Liste befinden) und klicken Sie auf die Schaltfläche "Prozess beenden".
Das Navigieren zu einer anderen Registerkarte ist wichtig, da JavaScript Ihren Tastendruck erfasst und aufgrund seiner Endlosschleife nichts dagegen unternimmt.
quelle
Die meisten Browser haben eine Warnung "Langsame Skriptleistung", die angezeigt wird, wenn die Ausführung eines außer Kontrolle geratenen Javaskripts sehr lange dauert. Dieser Warndialog bietet normalerweise die Option, das fehlerhafte Skript zu beenden.
quelle
Kommt auf den Browser an. Bei einigen können Sie auf die Schaltfläche "Stopp" klicken, um die Ausführung von Javascript zu stoppen. Andere nicht.
Ich schlage vor, der beste Weg ist, den Browser oder die Registerkarte vollständig zu beenden.
quelle
In den meisten anständigen Browsern wird eine Warnung angezeigt, dass das Skript nicht reagiert. Wenn nicht, sollten Sie am besten herausfinden, warum die Warnung nicht angezeigt wird.
quelle
Von /superuser/92617/stop-never-ending-popup-alerts-in-firefox#comment93927_92617 , anonym :
quelle
Wenn ich Chrome verwende und dies passiert, drücke ich Shift + Strg + Esc, um den Windows-Taskmanager aufzurufen. Wechseln Sie dann zur Registerkarte "Prozesse" und scrollen Sie durch die Prozesse "chrome.exe" (Chrome hat einen Prozess für jede geöffnete Registerkarte), bis ich einen mit einer deutlich höheren CPU-Auslastung als die anderen finde. Es hat ungefähr 30% für mich, während alle anderen 0-2% haben. Dann werde ich diesen Prozess einfach beenden. Das Gleiche können Sie tun, indem Sie unter tools> taskmanager oder shift + esc in Chrome den benutzerdefinierten Taskmanager für seine Prozesse öffnen. Dies könnte einfacher zu verwenden sein, da mehr Informationen zu den Registerkarten angezeigt werden.
quelle