Ist es möglich, JavaScript-Ausführung zu stoppen?

Ist es in gewisser Weise möglich, JavaScript so zu stoppen oder zu beenden, dass es keine weitere JavaScript-basierte Ausführung mehr verhindert, ohne den Browser neu zu laden?

Ich denke an ein JavaScript-Äquivalent von exit() in PHP.

Kurze Antwort:

 throw new Error("Something went badly wrong!"); 

Wenn Sie mehr wissen möchten, lesen Sie weiter.


Möchten Sie die Ausführung von JavaScript zum Entwickeln / Debuggen stoppen?

Der Ausdruck debugger; In Ihrem Code wird die Ausführung der Seite angehalten. Anschließend können Sie mit den Entwicklertools Ihres Browsers den Zustand Ihrer Seite zum Zeitpunkt des Einfrierens überprüfen.

Möchten Sie Ihre Anwendung willkürlich und im Design stoppen?

Bei einem Fehler?

Anstatt zu versuchen, alles zu stoppen, lassen Sie Ihren Code den Fehler behandeln. Lesen Sie über Exception durch googeln. Sie sind eine clevere Möglichkeit, Ihren Code zu Fehlerbehandlungsverfahren “springen” zu lassen, ohne langwierige if / else-Blöcke zu verwenden.

Wenn Sie glauben, dass die Unterbrechung des gesamten Codes die einzige Option ist, nachdem Sie über sie gelesen haben, wird die Lösung die folgende Ausnahme auslösen, die nirgendwo außer im Bereich “root” der Anwendung “abgefangen” wird:

 // creates a new exception type: function FatalError(){ Error.apply(this, arguments); this.name = "FatalError"; } FatalError.prototype = Object.create(Error.prototype); // and then, use this to trigger the error: throw new FatalError("Something went badly wrong!"); 

Stellen Sie sicher, dass Sie keine catch() Blöcke haben, die irgendeine Ausnahme fangen; In diesem Fall ändern Sie sie, um die Ausnahme "FatalError" :

 catch(exc){ if(exc instanceof FatalError) throw exc; else /* current code here */ } 

Wenn eine Aufgabe abgeschlossen ist oder ein beliebiges Ereignis eintritt?

return; beendet den Ausführungsablauf der aktuellen function.

 if(someEventHappened) return; // Will prevent subsequent code from being executed alert("This alert will never be shown."); 

Hinweis: return; funktioniert nur innerhalb einer function.

In beiden Fällen…

… möchten Sie vielleicht wissen, wie Sie asynchronen Code stoppen können. Es ist mit clearTimeout und clearInterval . Um schließlich XHR ( Ajax ) xhrObj.abort() zu stoppen, können Sie die xhrObj.abort() -Methode verwenden ( die auch in jQuery verfügbar ist ).

Du kannst einen JavaScript Tipperrors machen: D (denkt hier über den Tellerrand hinaus)

 thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario(); 

Oder etwas wie:

 new new 

So etwas könnte funktionieren:

 function javascript_abort() { throw new Error('This is not an error. This is just to abort javascript'); } 

Genommen von hier:

http://vikku.info/codesnippets/javascript/forcing-javascript-to-abort-stop-javascript-execution-at-any-time/

Nein.

Selbst wenn Sie eine Ausnahme auslösen, wird nur die aktuelle Ereignisschleife beendet. Callbacks, die an die Ereignisbehandlungsroutinen setTimeout oder DOM / XMLHttpRequest übergeben werden, werden weiterhin ausgeführt, wenn ihre Zeit gekommen ist.

Ich mache:

 setTimeout(function() { debugger; }, 5000) 

Auf diese Weise habe ich 5 Sekunden, um mit der Benutzeroberfläche und dann in den Stops zu interagieren. Las Zeit, die ich verwendet habe, war, als ich den benutzerdefinierten Tooltip sichtbar lassen musste, um einige Styling-Änderungen vorzunehmen.

ich benutze

return false;

Wenn ich JavaScript abbrechen möchte, läuft es weiter nach unten.

Wenn Sie in einer function sind, können Sie sie mit return; aber das stoppt nicht die Ausführung der Elternfunktion, die diese function aufgerufen hat.

Sie können die return in einer function früh aufrufen, und mindestens diese function wird nicht mehr ausgeführt. Sie können auch einfach throw '' , um einen Fehler zu verursachen und den aktuellen process zu stoppen. Aber das wird nicht alles aufhalten. setTimeout und setInterval können verzögerte functionen und functionen ausführen, die jeweils in einem Zeitintervall ausgeführt werden. Diese werden weiterlaufen. Javascript-Ereignisse funktionieren auch weiterhin wie gewohnt.

Der process ist mühsam, aber in Firefox:

  1. Öffnen Sie eine leere Registerkarte / ein leeres Fenster, um auf der aktuellen Seite eine neue Umgebung für das Skript zu erstellen
  2. Füllen Sie diese neue Umgebung mit dem auszuführenden Skript aus
  3. Aktivieren Sie das Skript in der neuen Umgebung
  4. Schließe (also töte) diese neue Umgebung auf …

stoppe oder beende JavaScript auf diese Art und Weise, [dass] eine weitere JavaScript-basierte Ausführung verhindert wird, ohne den Browser neu zu laden

Anmerkungen:

  • Schritt 4 stoppt nur die Ausführung von JavaScript in dieser Umgebung und nicht die Skripts anderer Fenster
  • Die ursprüngliche Seite wird nicht neu geladen, aber ein neues Register / Fenster wird mit dem Skript geladen
  • Wenn ein Tab / Fenster geschlossen ist, ist alles in dieser Umgebung verschwunden: alle Reste, Teilergebnisse, Code usw.
  • Die Ergebnisse müssen zurück in das übergeordnete oder ein anderes Fenster migriert werden
  • Um den Code erneut auszuführen, müssen die obigen Schritte wiederholt werden

Andere Browser haben und verwenden unterschiedliche Konventionen.

Definieren Sie eine Variable innerhalb der JavaScript-function, setzen Sie diese Variable auf 1, wenn Sie die function ausführen möchten, und setzen Sie sie auf 0, wenn Sie sie stoppen möchten

 var execute; function do_something() { if (execute == 1) { // execute your function } else { // do nothing } } 

Ich weiß, das ist alt, aber ich wollte das machen und ich habe meiner Meinung nach eine leicht verbesserte Lösung der Wurfantworten gefunden. Halte die Fehlermeldungen einfach vorübergehend auf und reaktiviere sie später mit setTimeout:

 setTimeout(function() { window.onerror = function(message, url, lineNumber) { return false; }; }, 50); // sets a slight delay and then restores normal error reporting window.onerror = function(message, url, lineNumber) { return true; }; throw new Error('controlledError');