Подтвердить что ты не робот

Отменить выполнение бесконечного цикла в jsfiddle

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

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

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

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

к

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

  • Откройте новую вкладку
  • Откройте диспетчер задач с помощью Shift-Escape
  • Убить задачу
  • Использовать кнопку "Назад" для убитой вкладки (JSFiddle не запускает script)
  • Исправить ошибку
  • Update

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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/

Ответ 6

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

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

Ответ 7

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

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

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