Отмена выполнения бесконечного цикла в jsfiddle - PullRequest
55 голосов
/ 01 октября 2011

Когда вы получаете бесконечный цикл в jsfiddle в Chrome, ваш единственный выбор (о котором я знаю) - закрыть вкладку.Конечно, это означает, что вы потеряете всю свою работу в текущем окне!Есть ли простой способ остановить бесконечно выполняемый сценарий?

  1. У меня открыты инструменты разработчика, потому что я выполнял некоторую отладку.
  2. Я могу приостановить выполнение сценария и пройти через негоцикл.
  3. Я не могу найти где-нибудь, чтобы остановить сценарий.
  4. Я не могу изменить сценарий или переменные, чтобы остановить бесконечный цикл (потому что выполнение сценария происходит в iframe наотдельный домен, поэтому изменение данных в iframe с помощью JavaScript не допускается и создает исключение в консоли).

Все началось, потому что я решил поменять направления в цикле с

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

до

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

Но, как вы можете видеть выше, я забыл изменить его с c++ на c--.

Есть идеи ??У меня все еще открыта вкладка, и я надеюсь вернуть ее, не закрывая вкладку: -)

Ответы [ 8 ]

97 голосов
/ 12 марта 2013

Как это сделать без режима разработчика:

  • Открыть новую вкладку
  • Открыть диспетчер задач с помощью Shift-Escape
  • Задание на убийство
  • Используйте кнопку возврата для убитой вкладки (JSFiddle не будет запускать скрипт)
  • Исправлена ​​ошибка
  • Обновление
7 голосов
/ 01 октября 2011

В режиме разработчика зайдите в ресурсы, найдите свой сценарий, скопируйте и вставьте его в текстовый документ или новое окно.Если вы не можете найти его в ресурсах, выполните поиск используемой вами переменной или строки кода.

3 голосов
/ 12 мая 2013

Один из способов разорвать бесконечный цикл - вызвать необработанное исключение, которое остановит выполнение текущего стека вызовов.Для этого:

  1. приостановить отладчик
  2. найти многообещающий оператор внутри цикла, например, вызов функции: foo.bar(args)
  3. в консоли, перезаписатьФункция для броска: foo.bar=function(){throw 42;}
  4. Отключить отладчик

у меня сработало.Я не пробовал, но я полагаю, что, перегружая метод получения или установки, вы можете использовать описанный выше прием также для назначений и операций чтения, а не только для вызовов функций.Кроме того, установив переменную в значение undefined, вы можете вызвать фатальную ошибку (и, следовательно, разорвать цикл), если поле этой переменной используется в цикле.Например, delete foo.tab сломает foo.tab[42] или foo.tab.bar.По какой-то причине простая запись foo=undefined в консоли не поможет (возможно, она определяет локальную для консоли окно переменной с именем foo).

1 голос
/ 27 июня 2016

Не удалось запустить диспетчер задач Chrome, пока была активна вкладка «Цикл». Мне пришлось выбрать другую вкладку. Затем я нажал Shift-Escape, чтобы запустить диспетчер задач, завершить процесс JSFiddle, повторно выбрать вкладку и нажать кнопку «Назад», чтобы отобразить страницу без запуска сценария.

JSFiddle загружает панель «результатов» с помощью iframe. По состоянию на июнь 2016 года URL-адрес для фрейма представляет собой URL-адрес Fiddle плюс "/ show /". Я проверил исходный код iframe и обнаружил, что он загружает еще один URL с "/ light /". Один из этих URL должен содержать ваш исходный код.

Если ваш браузер поддерживает схему URI вида источника , вы можете получить доступ к исходному коду вашей скрипки следующим образом:

  • вид-источник: jsfiddle.net/user_name/fiddle_hash/revision/light/
  • Вид-источник: jsfiddle.net/user_name/fiddle_hash/revision/show/
1 голос
/ 10 апреля 2012

Запустите Process Explorer и завершите процесс chrome, который использует большое количество процессоров ... он "вылетит" на странице и перезагрузит вас ...

0 голосов
/ 27 ноября 2018

У меня файл застрял в цикле, и на JSFiddle зависла бы панель инструментов.

  • Единственный способ, которым я мог очистить, - это отключить JavaScript на вкладке настроек, когда у меня открыта страница «Новая скрипка» на другой вкладке Chrome.
  • Затем перейдите ко всем скрипкам.
  • Удалите скрипку, и тогда получится ошибка 404.
  • Включите JavaScript и перезагрузите приборную панель.
  • После этого смог продолжить создавать и редактировать скрипки.
0 голосов
/ 22 декабря 2014

Если другие пользователи застряли после прочтения других ответов, вот что сработало для меня (Chrome, Mac).Для меня вкладка JSFiddle «застряла», но остальная часть Chrome отзывчива.У меня была открыта консоль JavaScript на панели ресурсов, но она также не отвечала.Перезагрузка страницы в этом состоянии не помогла, потому что JSFiddle передаст мне сценарий, прежде чем я вообще что-нибудь получу.

В конце концов это сработало для меня;может быть, это вам тоже поможет ...

  • Пока страница не отвечает, перейдите на Chrome > Preferences > Privacy и отключите JavaScript.
  • Подождите, пока страница не умрет (около 4 или 5 минутдля меня);на этой вкладке появляется значок печального лица.
  • Нажмите кнопку "Назад".Он должен выглядеть так, как будто JSFiddle загружается, но не будет, потому что, как ни странно, JSFiddle достаточно JavaScript, чтобы просто отрисовывать страницу.
  • View > Developer > View source
  • Мой скрипт, только слегка искаженныйвсе невинно, как в div под названием 'panel_js'.
  • Выделите, скопируйте, снова вдохните, выучите урок.
0 голосов
/ 07 января 2012

Та же проблема возникла здесь, я открыл консоль javascript в состоянии паузы сценария.(Сделал паузу с помощью Инструментов разработчика)

Затем я изменил значение переменной, чтобы цикл while завершился.

...