остановить выполнение скрипта javascript в браузере
Тупой вопрос: Как остановить скрипт в отладчике браузера?
Если скрипт зависнет, то FF должен показать вам окно о том, что его надо остановить. Вы можете понизить время ожидания результата выполнения скрипта.
Я не нашёл в гугле как остановить скрипт. Может быть такого и нет, но если вы не знаете, что у вас отъедает CPU, попробуйте занизить время с 10 секунд до, допустим, 5 и запустите ваш скрипт через профайлер, он, возможно, покажет какой код тормозит.
Vest, что удивительно, я тоже ничего не нагуглил. Похоже прерывание скрипта невозможно. Вот только не могу понять причин этого, но она наверное должна быть, почему так сделали. Ещё надо заметить, что я использую Vue для интерфейса в браузере. Я не спец, но может это как-то связано с рендером. Типа пока не вернутся вычисления, не может закончить работу с DOM. Но с другой стороны там Virtual DOM.
А я сейчас отлаживаю скрипт, проводящий вычисления на клиенте. Там довольно навороченный рекурсивный алгоритм. Отлаживаю и. иногда он не выходит из рекурсии, всё зависает. Приходится закрывать окно, а потом заново всё открывать. Но скрипт на самом деле очень быстрый (если правильно работает), т.е. сложный алгоритмически, но не загрузный по времени. Воркеры или сервер не нужен.
За ссылочку про понижение времени — спасибо.
Николай Чуприк, меня закидают тапками, но я думаю, что всё дело в однопоточности JavaScript или конкретной вкладки. Когда у вас единственный поток занят рекурсивными вычислениями, то у него нет эдакого кванта времени, чтобы обработать ещё нажатие несуществующей кнопки Stop в вашем отладчике. Наверняка, это всё крутится в одном потоке, а если и нет, то возможно этот поток не отпущен браузером, чтобы принять вашу команду.
Я бы предложил вам добавить проверку на некоторую глобальную переменную, и если она «true», выйти из рекурсии, но смешно то, что JavaScript-консоль скорее всего зависнет и вы не сможете в ней выставить вашу переменную в «true»
¯\_(ツ)_/¯
Vest, JS поток конечно один, но для JS браузер является супервизором. Мне не понятно, почему он не может его тормознуть. Или кнопки Developer Tools реализованы в том же потоке JS :). Странно конечно.
Мне сейчас приходится ставить в рекурсию окно confirm(‘Стоп?’), и пока долбишь «нет», рекурсия продолжается, что неудобно. Причём если ставить breakpoint в рекурсивную функцию, то я могу всего лишь остановить выполнение скрипта, но не прервать его. После breakpoint у меня выбора нет, могу только продолжить выполнение, даже если понимаю, что это уход рекурсии в нирвану.
Как завершить скрипт в JavaScript?
17 ответов
JavaScript-эквивалент для die PHP. Кстати, он просто вызывает exit() (спасибо splattne ) :
Это просто останавливает выполнение программы из этой строки, вместо того, чтобы выдавать какие-либо ошибки в консоли.
Я использую этот кусок кода, чтобы остановить выполнение:
Вы получите ошибку консоли, но она хорошо работает для меня.
Эта небольшая функция довольно близка к имитации выхода PHP (). Как и с другими решениями, больше ничего не добавляйте.
Даже в простых программах без дескрипторов, событий и тому подобного лучше всего поместить код в «основную» функцию, даже если это единственная процедура:
Таким образом, когда вы хотите остановить программу, вы можете использовать «возврат».
Поместите ключевое слово debugger; в код JavaScript, где вы хотите остановить выполнение. Затем откройте инструменты разработчика вашего любимого браузера и перезагрузите страницу. Теперь он должен остановиться автоматически. Откройте раздел Источники своих инструментов: ключевое слово debugger; выделено, и у вас есть возможность возобновить выполнение скрипта.
Я надеюсь, что это помогает.
Дополнительная информация по адресу:
Я думаю, что на этот вопрос был дан ответ, нажмите здесь для получения дополнительной информации. Ниже приведен краткий ответ.
Вы также можете использовать свой браузер для добавления точек останова, каждый браузер похож, проверьте информацию ниже для вашего браузера.
Чтобы получить информацию о точках останова Chrome, нажмите здесь
Чтобы получить информацию о точках останова Firefox, нажмите здесь
Для получения информации о точках останова Explorer нажмите
Чтобы получить информацию о точках останова Safari, нажмите здесь.
Обратите внимание, что на практике интерпретаторы Javascript большинства браузеров просто останавливают текущий скрипт, если они сталкиваются с ошибкой. Таким образом, вы можете сделать что-то вроде доступа к атрибуту неустановленной переменной:
И это вероятно прервет сценарий. Но вы не должны рассчитывать на это, потому что это совсем не стандартно, и это действительно кажется ужасной практикой.
Функции выхода обычно выходят из программы или скрипта вместе с сообщением об ошибке в качестве параметра. Например умереть (. ) в PHP
Вы можете легко проверить это:
Если вам все равно, что это ошибка, просто напишите:
Это остановит ваш основной (глобальный) код. Полезно для некоторых аспектов отладки / тестирования.
Это пример того, что, если условие существует, то завершить сценарий. Я использую это в моем клиентском JavaScript SSE, если
. в любом случае, общая идея такова:
Это прекратит / покрасит ваш скрипт javascript
Бросить «»;
Это неправильное использование концепции, но, вероятно, единственный вариант. И, да, вам придется сбросить все прослушиватели событий, как упоминается в принятом ответе. Вам также понадобится одна точка входа, если я прав.
Window.stop ( ) ;
Это не работает во время загрузки страницы. Останавливает также декодирование страницы. Таким образом, вы не можете использовать его, чтобы предложить пользователю вариант вашей страницы без использования JavaScript.
Отладчик ;
Останавливает выполнение только при открытом отладчике. Прекрасно работает, но не доставляется.
Если вы используете любую неопределенную функцию в скрипте, тогда скрипт остановится из-за «Uncaught ReferenceError». Я попытался с помощью следующего кода и первые две строки выполнены.
Я думаю, это лучший способ остановить сценарий. Если есть другой способ, пожалуйста, прокомментируйте меня. Я также хочу знать другой лучший и простой способ. Кстати, я не получил выход или умереть встроенную функцию в Javascript, как PHP для завершения сценария. Если кто-то знает, пожалуйста, дайте мне знать.
Существует много способов выйти из сценария JS или Node. Вот наиболее актуальные:
В моем случае я использовал window.stop API, который похож на нажатие кнопки X в вашем браузере:
Просто создайте условие BOOL, здесь нет необходимости в сложном коде.
Как завершить работу скрипта в Javascript
Мне нужен код, который выйдет из JS-скрипта, как PHP «exit» или «die». (Я знаю, что это не лучшая практика программирования, но мне это нужно).
11 ответов
функции»exit»обычно выходят из программы или скрипта вместе с сообщением об ошибке в качестве параметра. Например die(. ) в php
эквивалент в JS должен сигнализировать об ошибке с бросить ключевое слово вроде этого:
вы можете легко проверить это:
даже в простых программах без дескрипторов, событий и т. д. Лучше всего поместить код в» основную » функцию, даже если это единственная процедура:
таким образом, когда вы хотите остановить программу, вы можете использовать «return».
здесь много способов для выхода из сценария JS или узла. Вот самые актуальные:
Если вам все равно, что это ошибка, просто напишите:
это остановит ваш основной (глобальный) код от продолжения. Полезно для некоторых аспектов отладки/тестирования.
место debugger; ключевое слово в коде JavaScript, где вы хотите остановить выполнение. Затем откройте инструменты разработчика вашего любимого браузера и перезагрузите страницу. Теперь он должен остановиться автоматически. Откройте источник раздел ваших инструментов: debugger; ключевое слово выделено, и у вас есть возможность возобновить выполнение сценария.
надеюсь, это поможет.
больше информации at:
этот ответ предоставляет подробную информацию, демонстрирующую дополнительную структуру, которая поможет решить этот и другие ранний выход, исключения, управление процессом и последовательную обработку функций в модульных javascripts. Решение предоставляет примеры закрытия. Этот ответ предполагает, что человек хотел бы, чтобы другие скрипты на странице продолжали работать после выхода данного скрипта.
выше-очень простой способ выхода. Перед отправкой вашей функции в этот «бегун» я рекомендую обернуть вашу функцию в тестовый жгут, обернув объект, который загружает жгут и может быть выполнен, тестовый жгут должен предоставить методы, такие как exit() для вашей функции, чтобы их не нужно было передавать.
примеры всего, что вам нужно для создания хорошей стратегии выхода, доступны на github здесь (файл: pseudo_threads2.Яш): https://github.com/fromSpace/js-recursionwithevents-practice
уведомление в pseudo_threads2.js, что функция simConstantMomentum () возвращает функцию, которая имеет лексическую область vars со всеми функциями жгута проводов. Вместо этого я рекомендую вам вызвать генератор жгута проводов в верхней части этой функции и назначить его результат локальному var, чтобы функция, которую вы хотите выйти, больше похожа на эту, Когда вы закончите.
обратите внимание, что на практике интерпретаторы Javascript большинства браузеров просто перестанут запускать текущий скрипт, если они столкнутся с ошибкой. Таким образом, вы можете сделать что-то вроде доступа к атрибуту unset переменная:
и это наверное прервать сценарий. Но вы не должны рассчитывать на это, потому что это совсем не стандартно, и это действительно кажется ужасной практикой.
Отладка в браузере Chrome
Давайте отвлечёмся от написания кода и поговорим о его отладке.
Отладка – это процесс поиска и исправления ошибок в скрипте. Все современные браузеры и большинство других сред разработки поддерживают инструменты для отладки – специальный графический интерфейс, который сильно упрощает отладку. Он также позволяет по шагам отследить, что именно происходит в нашем коде.
Мы будем использовать браузер Chrome, так как у него достаточно возможностей, в большинстве других браузеров процесс будет схожим.
Панель «Исходный код» («Sources»)
Версия Chrome, установленная у вас, может выглядеть немного иначе, однако принципиальных отличий не будет.
При первом запуске получаем следующее:
Кнопка-переключатель откроет вкладку со списком файлов.
Интерфейс состоит из трёх зон:
Консоль
Результат выполнения инструкций сразу же отображается в консоли.
Точки останова (breakpoints)
Ура! Вы поставили точку останова. А теперь щёлкните по цифре 8 на восьмой линии. Номер строки будет окрашен в синий цвет.
Вот что в итоге должно получиться:
Точка останова – это участок кода, где отладчик автоматически приостановит исполнение JavaScript.
Пока исполнение поставлено «на паузу», мы можем просмотреть текущие значения переменных, выполнить команды в консоли, одним словом, мы выполняем отладку кода.
В правой части графического интерфейса мы видим список точек останова. А когда таких точек выставлено много, да ещё и в разных файлах, этот список поможет эффективно ими управлять:
Можно задать и так называемую условную точку останова – щёлкните правой кнопкой мыши по номеру строки в коде. Если задать выражение, то именно при его истинности выполнение кода будет приостановлено.
Этот метод используется, когда выполнение кода нужно остановить при присвоении определённого выражения какой-либо переменной или при определённых параметрах функции.
Команда Debugger
Выполнение кода можно также приостановить с помощью команды debugger прямо изнутри самого кода:
Способ удобен тем, что можно продолжить работать в редакторе кода без необходимости переключения в браузер для выставления точки останова.
Остановимся и оглядимся
В нашем примере функция hello() вызывается во время загрузки страницы, поэтому для начала отладки (после того, как мы поставили точки останова) проще всего её перезагрузить. Нажмите F5 (Windows, Linux) или Cmd + R (Mac).
Выполнение прервётся на четвёртой строчке:
Чтобы понять, что происходит в коде, щёлкните по стрелочкам справа:
Watch показывает текущие значения выражений.
Нажмите на + и введите выражение. В процессе выполнения отладчик автоматически пересчитывает и выводит его значение.
Call Stack показывает последовательность вызовов функций.
При нажатии на элемент списка (например, на «anonymous») отладчик переходит к соответствующему коду, и нам представляется возможность его проанализировать.
Scope показывает текущие переменные.
В Local отображаются локальные переменные функций, а их значения подсвечены в исходном коде.
В Global перечисляются глобальные переменные (т.е. объявленные за пределами функций).
Не обращайте пока внимание на ключевое слово this – его мы изучим чуть позже.
Пошаговое выполнение скрипта
А теперь давайте пошагаем по нашему коду.
В правой части панели для этого есть несколько кнопок. Рассмотрим их.
Возобновляет выполнение кода. Если больше нет точек останова, отладчик прекращает работу и позволяет приложению работать дальше.
Вот, что мы увидим, кликнув на неё:
В отличие от предыдущего примера, здесь мы «заходим» во вложенные функции и шаг за шагом проходим по скрипту.
Выполнение кода остановится на самой последней строчке текущей функции. Этот метод применяется, когда мы случайно нажали и зашли в функцию, но нам она неинтересна и мы как можно скорее хотим из неё выбраться.
– активировать/деактивировать все точки останова.
Эта кнопка не влияет на выполнение кода, она лишь позволяет массово включить/отключить точки останова.
– разрешить/запретить остановку выполнения в случае возникновения ошибки.
Если опция включена и инструменты разработчика открыты, любая ошибка в скрипте приостанавливает выполнение кода, что позволяет его проанализировать. Поэтому если скрипт завершается с ошибкой, открываем отладчик, включаем эту опцию, перезагружаем страницу и локализуем проблему.
Если щёлкнуть правой кнопкой мыши по строчке кода, в контекстном меню можно выбрать опцию «Continue to here» («продолжить до этого места»).
Этот метод используется, когда нам нужно продвинуться на несколько шагов вперёд до нужной строки, но лень выставлять точки останова.
Логирование
К примеру, выведем в консоль значения от нуля до четырёх:
Если правильно выстроить логирование в приложении, то можно и без отладчика разобраться, что происходит в коде.
Итого
Приостановить выполнение скрипта можно тремя способами:
При остановке мы можем отлаживать – проанализировать переменные и пошагово пройти по процессу, что поможет отыскать проблему.
Нами описаны далеко не все инструменты разработчика. С полным руководством можно ознакомиться здесь: https://developers.google.com/web/tools/chrome-devtools.
Для простой отладки вполне достаточно сведений из этой главы, но в дальнейшем рекомендуем вам изучить официальное руководство, если вы собираетесь разрабатывать для браузеров.
И, конечно, вы можете просто покликать в разных местах инструментов разработчика. Пожалуй, это наискорейший способ ими овладеть. Не забывайте про правый клик мыши и контекстные меню!
Можно ли остановить выполнение скрипта? [дубликат]
этот вопрос уже есть ответ здесь:
можно ли каким-то образом остановить или прекратить JavaScript таким образом, что он предотвращает дальнейшее выполнение на основе JavaScript, не перезагружая браузер?
Я думая о эквиваленте JavaScript exit() в PHP.
11 ответов:
если вы хотите узнать больше, продолжайте читать.
вы хотите остановить выполнение JavaScript для разработки / отладки?
выражение debugger; в вашем коде остановится выполнение страницы, а затем инструменты разработчика Вашего браузера позволят вам просмотреть состояние вашей страницы на момент ее замораживания.
вы хотите, чтобы остановить ваше заявление безосновательно и дизайн?
по ошибки?
вместо того, чтобы пытаться остановить все, пусть ваш код обрабатывает ошибку. Читайте о Exception s с помощью Google. Это умный способ позволить вашему коду «перейти» к процедурам обработки ошибок без использования утомительных блоков if/else.
прочитав о них, если вы считаете, что прерывание всего кода является абсолютно единственным вариантом, бросая исключение, которое не будет «поймано» нигде, кроме как в «корне» вашего приложения» область действия-это решение:
убедитесь, что у вас нет catch() блоки, которые ловят любой исключение; в этом случае измените их, чтобы перестроить ваш «FatalError» исключение:
когда задача завершается или происходит произвольное событие?
return; прекращается поток выполнения текущей функции.
Примечание: return; работает только в пределах функции.
в обоих случаи.
вы можете сделать опечатку JavaScript 😀 (мышление вне коробки здесь)
что то вроде этого должно работать:
даже если вы создадите исключение, оно убьет только текущий цикл событий. Обратные вызовы, переданные обработчикам событий setTimeout или DOM/XMLHttpRequest, будут по-прежнему выполняться, когда придет их время.
таким образом у меня есть 5 секунд, чтобы взаимодействовать с UI, а затем прекращается. Las время, которое я использовал, было тогда, когда мне нужно было оставить пользовательскую подсказку видимой, чтобы сделать некоторые изменения стиля.
если я хочу прервать JavaScript от запуска дальше вниз.
Если вы находитесь в функции, вы можете выйти из нее с помощью return; но это не останавливает выполнение родительской функции, которая вызвала эту функцию.
можно назвать return в самом начале функции, и, по крайней мере, эта функция перестанет работать. Вы также можете просто использовать throw » чтобы вызвать ошибку и останавливает текущий процесс. Но это не остановит все. setTimeout и setInterval можно сделать задержанные функции и функции, которые выполняются на временном интервале, соответственно. Они будут продолжать работать. События Javascript также будут продолжать работать в обычном режиме.
процесс утомительный, но в Firefox:
остановить или прекратить JavaScript это [в] способ [что он] предотвратить[s] дальше Выполнение на основе JavaScript из происходящего, без перезагрузки браузера
другие браузеры имеют и используют различные соглашения.
определите переменную внутри функции JavaScript, установите эту переменную в 1, Если вы хотите выполнить функцию, и установите ее в 0, если вы хотите остановить ее
Я знаю, что это старый, но я хотел сделать это и я нашел, на мой взгляд, немного улучшил решение бросить ответы. Просто временно подавите сообщения об ошибках и повторно активируйте их позже с помощью setTimeout: