it-swarm.com.de

Abbrechen der Endlosschleifenausführung in jsfiddle

Wenn Sie in jsfiddle in Chrome eine Endlosschleife erhalten, besteht Ihre einzige Wahl (die ich kenne) darin, die Registerkarte zu schließen. Das bedeutet natürlich, dass Sie im aktuellen Fenster alle Ihre Arbeit verlieren! Gibt es eine einfache Möglichkeit, ein unendlich ausführendes Skript zu stoppen?

  1. Ich habe die Entwicklertools geöffnet, da ich einige Fehler behoben habe.
  2. Ich bin in der Lage, das Skript anzuhalten und die Schleife zu durchlaufen.
  3. Ich kann nirgendwo etwas finden, um das Skript zu stoppen.
  4. Ich kann das Skript oder die Variablen nicht ändern, um die Endlosschleife zu stoppen (da die Skriptausführung in einem iframe in einer separaten Domäne erfolgt. Daher ist das Ändern von Daten im iframe mit JavaScript nicht zulässig und generiert eine Ausnahme in der Konsole).

Es begann alles, weil ich mich entschied, die Richtungen auf meiner Schleife zu wechseln

for (var c = 0; c <= 11; c++)

zu

for (var c = 12; c > 0; c++)

Aber wie Sie oben sehen können, habe ich vergessen, es von c++ in c-- zu ändern.

Irgendwelche Ideen?? Ich habe immer noch die Registerkarte geöffnet und hoffe, dass ich sie zurückbekomme, ohne die Registerkarte zu schließen :-)

55
mellamokb

Gehen Sie im Entwicklermodus in die Ressourcen, suchen Sie nach Ihrem Skript, kopieren Sie es und fügen Sie es in ein Textdokument oder ein neues Fenster ein. Wenn Sie es in Ressourcen nicht finden können, suchen Sie nach einer von Ihnen verwendeten Variablen oder Codezeile.

7
mowwwalker

So gehen Sie ohne den Entwicklermodus vor:

  • Öffne eine neue Registerkarte
  • Öffnen Sie den Task-Manager mit Umschalttaste
  • Aufgabe töten
  • Verwenden Sie die Schaltfläche "Zurück" für den getöteten Tab (JSFiddle führt das Skript nicht aus)
  • Fehler beheben
  • Aktualisieren
97
Adam Ritter

Eine Möglichkeit, die Endlosschleife zu brechen, besteht darin, eine unbehandelte Ausnahme auszulösen, wodurch die Ausführung des aktuellen Aufrufstapels gestoppt wird .

  1. pausiere den Debbuger
  2. finden Sie eine vielversprechende Anweisung innerhalb der Schleife, zum Beispiel einen Funktionsaufruf: foo.bar(args)
  3. Überschreiben Sie in der Konsole die auszulösende Funktion: foo.bar=function(){throw 42;}
  4. deaktivieren Sie den Debugger 

arbeitete für mich Ich habe es nicht versucht, aber ich glaube, durch Überladen von Getter oder Setter können Sie den oben beschriebenen Trick auch für Zuweisungen und Lesevorgänge verwenden, nicht nur für Funktionsaufrufe. Wenn Sie eine Variable auf undefined setzen, können Sie einen schwerwiegenden Fehler verursachen (und die Schleife dadurch brechen), wenn das Feld dieser Variablen in der Schleife verwendet wird. Zum Beispiel wird delete foo.tabfoo.tab[42] oder foo.tab.bar brechen. Aus irgendeinem Grund reicht es nicht aus, einfach foo=undefined in die Konsole zu schreiben (vielleicht definiert es eine lokale Variable des Konsolenfensters mit dem Namen foo).

3
qbolec

Ich konnte den Task-Manager von Chrome nicht starten, während die Registerkarte "Schleifen" aktiv war. Ich musste eine andere Registerkarte auswählen. Dann habe ich Shift-Escape gedrückt, um den Task-Manager zu starten, den JSFiddle-Prozess zu beenden, die Registerkarte erneut auszuwählen und die Zurück-Schaltfläche zu drücken, um die Seite anzuzeigen, ohne das Skript auszuführen.

JSFiddle lädt das Ergebnisfenster mit einem iframe. Seit Juni 2016 ist die URL für den Frame die URL Fiddle plus "/ show /". Ich habe den Quellcode des iframe überprüft und festgestellt, dass mit "/ light /" noch eine weitere URL geladen wird. Eine dieser URLs sollte Ihren Quellcode enthalten.

Wenn Ihr Browser das view-source URI-Schema unterstützt, können Sie wie folgt auf den Quellcode Ihrer Geige zugreifen:

  • view-source: jsfiddle.net/Benutzername/fiddle_hash/revision/light/
  • view-source: jsfiddle.net/us_name/fiddle_hash/revision/show/
1
Lachmanski

Starten Sie den Process Explorer und beenden Sie den Chrome-Prozess, der viel CPU benötigt.

1
David

Ich hatte eine Datei in einer Schleife und würde das Dashboard auf JSFiddle ebenfalls einfrieren. 

  • Die einzige Möglichkeit, die ich löschen konnte, bestand darin, JavaScript auf der Registerkarte "Einstellungen" zu deaktivieren, während eine neue Seite Fiddle in einer anderen Chrome-Registerkarte geöffnet war.
  • Navigieren Sie dann zu Alle Geigen.
  • Löschen Sie die Fiddle und dann würde es einen 404-Fehler geben.
  • Aktivieren Sie JavaScript und laden Sie das Dashboard erneut.
  • Konnte danach weiter Geigen machen und bearbeiten.
0
Brad Lensing

Dasselbe Problem trat hier auf, ich öffnete die Javascript-Konsole in einem Skript, in dem der Status angehalten wurde. (Hat es mit den Developer Tools angehalten)

Dann habe ich den Variablenwert geändert, so dass die while-Schleife enden würde.

Falls andere nach dem Lesen der anderen Antworten stecken bleiben, funktioniert Folgendes (Chrome, Mac). Für mich war der JSFiddle-Tab "festgefahren", aber der Rest von Chrome reagierte. Ich hatte die JavaScript-Konsole im Ressourcenbereich geöffnet, aber sie reagierte auch nicht. Das erneute Laden der Seite in diesem Status hat nicht geholfen, da JSFiddle mir das Skript vor der Veröffentlichung überhaupt zur Verfügung stellte.

Am Ende hat das für mich funktioniert; vielleicht hilft es dir auch ...

  • Wenn die Seite nicht reagiert, wechseln Sie zu Chrome > Preferences > Privacy und deaktivieren Sie JavaScript.
  • Warten Sie, bis die Seite stirbt (etwa 4 oder 5 Minuten für mich); Das traurige Gesichtssymbol erscheint auf dieser Registerkarte.
  • Drücken Sie die Zurück-Taste. Es sollte so aussehen, als würde JSFiddle geladen, aber JSFiddle benötigt JavaScript nur, um eine Seite zu rendern.
  • View > Developer > View source
  • Mein Skript, nur ein wenig zerfetzt, saß da ​​ganz unschuldig wie in einer div namens 'panel_js'.
  • Markieren, kopieren, atmen, lernen.
0
kwinkunks