Как остановить javascript в браузере хром
Как я могу выйти из сценария JavaScript так же, как PHP exit или die ? Я знаю, что это не лучшая практика программирования, но мне нужно.
Как вы думаете, вы могли бы расширить это требование, именно поэтому вы пытаетесь достичь этого? просто return; может быть достаточно в зависимости от ваших требований, действует как die () без параметров. Если вам это «нужно», вам лучше переосмыслить свой дизайн.Эквивалент JavaScript для PHP die . Кстати, это просто звонки exit() (спасибо splattne):
Этот код не останавливает события на элементах, а только события окна. Так что вам также нужно перебрать все элементы на странице, делая что-то похожее. Все это звучит как очень странное требование. вся концепция кристалла немного нарушена - поток должен быть способен обрабатывать любые и все возможные ситуации, независимо от того, требуется ли это попробовать или нет. Я думаю, что вы не включили все события, которые должны быть обработаны, такие как событие "selectstart".Эквивалент в JS - сигнализировать об ошибке с помощью ключевого слова throw следующим образом:
Вы можете легко проверить это:
@Sydwell: Если вы окружите его блоком catch, он будет перехвачен, и программа не прекратит работу, игнорируя точку здесь.Даже в простых программах без дескрипторов, событий и тому подобного лучше всего поместить код в «основную» функцию, даже если это единственная процедура:
Таким образом, когда вы хотите остановить программу, вы можете использовать «возврат».
Если вам все равно, что это ошибка, просто напишите:
Это остановит ваш основной (глобальный) код. Полезно для некоторых аспектов отладки / тестирования.
В том-то и дело - вы тоже могли бы сделать mikeyMouse; - ошибка прекратится. Это быстро и грязно. Ах, достаточно справедливо - может быть, добавить это к вашему ответу?Есть много способов выйти из сценария JS или Node. Вот наиболее актуальные:
Если вы находитесь в REPL (т.е. после запуска node в командной строке), вы можете набрать .exit для выхода.
Я не хотел оскорблять интеллект читателей, объясняя аббревиатуру, которая появляется как первый результат его поиска в Google. Я предлагаю вам не смешивать код JavaScript с командами REPL, потому что если пользователь скопирует / вставит этот блок кода и выполнит его, он получит синтаксическую ошибку в строке «.exit».В моем случае я использовал window.stop API, который похож на нажатие кнопки X в вашем браузере:
Поместите debugger; ключевое слово в свой код JavaScript, где вы хотите остановить выполнение. Затем откройте инструменты разработчика вашего любимого браузера и перезагрузите страницу. Теперь он должен остановиться автоматически. Откройте раздел Источники ваших инструментов: debugger; ключевое слово выделено, и у вас есть возможность возобновить выполнение скрипта.
Я надеюсь, что это помогает.
Больше информации на:
Я думаю, что на этот вопрос ответили, нажмите здесь для получения дополнительной информации. Ниже приведен краткий ответ.
Вы также можете использовать свой браузер для добавления точек останова, каждый браузер похож, проверьте информацию ниже для вашего браузера.
Для Chrome Информации изломов нажмите здесь
Для Firefox Информации изломов нажмите здесь
Для проводника точек разрыва информации нажмите
для Safari точки излома информации нажмите здесь
Если вы ищете способ принудительно прекратить выполнение всего Javascript на странице, я не уверен, что есть официально санкционированный способ сделать это - похоже, что это может быть угрозой безопасности (хотя для честно говоря, я не могу думать о том, как это будет с моей головы). Обычно в Javascript, когда вы хотите, чтобы ваш код прекратил работать, вы просто return выполняете какую-либо функцию. (The return необязательное утверждение, если оно является последним в функции и функция не должна возвращать значение). Если есть какая-то причина, по которой возвращение недостаточно для вас, вам, вероятно, следует отредактировать более подробную информацию в вопросе о том, почему вы думаете, вам это нужно, и, возможно, кто-то может предложить альтернативное решение.
Обратите внимание, что на практике интерпретаторы Javascript большинства браузеров просто останавливают текущий скрипт, если они сталкиваются с ошибкой. Таким образом, вы можете сделать что-то вроде доступа к атрибуту неустановленной переменной:
и это, вероятно, прервет сценарий. Но вы не должны на это рассчитывать, потому что это совсем не стандартно, и это действительно кажется ужасной практикой.
РЕДАКТИРОВАТЬ : ОК, может быть, это не был хороший ответ в свете Олафура. Хотя die() функция, с которой он связан, в основном реализует мой второй абзац, то есть просто выдает ошибку.
Как пройти код JavaScript в отладчике Google Chrome, как прекратить выполнение скрипта, если я не хочу продолжать? Единственный способ, который я нашел, это закрыть окно браузера.
Нажатие «Обновить эту страницу» запускает остальную часть кода и даже отправляет формы, как если бы вы нажимали F8 «Продолжить».
ОБНОВЛЕНИЕ :
При нажатии F5 (Обновить) во время приостановки скрипта:
Закрытие, а затем повторное открытие окна браузера - это не всегда самый простой способ, потому что это уничтожит состояние сеанса браузера, и это может быть важно. Все ваши точки останова также потеряны.
ОБНОВЛЕНИЕ (январь 2014) :
Обновить во время отладки:
- Chrome v31: позволяет запускать сценарии и останавливается на дальнейших точках останова (но не отправляет ajax-запросы), затем обновляется.
- IE 11: обновление ничего не делает, но вы можете нажать F5, чтобы продолжить.
- Firefox v26: позволяет запускать сценарии, но не останавливается на дальнейших точках останова, отправляет запросы ajax, а затем обновляет.
Перейдите на ту же страницу во время отладки:
- Chrome v31: такой же, как Refresh.
- IE 11: сценарии прекращаются, начинается новый сеанс браузера (аналогично закрытию и открытию снова).
- Firefox v26: ничего не происходит.
Также Juacala предложил эффективный обходной путь. Например, если вы используете jQuery, запустите delete $ из консоли остановит выполнение, как только встретится любой метод jQuery. Я протестировал его во всех вышеперечисленных браузерах и могу подтвердить, что он работает.
ОБНОВЛЕНИЕ (март 2015) :
Обходной путь Juacala все еще полезен при отладке в IE или Firefox.
ОБНОВЛЕНИЕ (январь 2019) :
Наконец-то в Chrome Dev Tools добавлен правильный способ остановить выполнение скрипта, что приятно (хотя и немного скрыто). Обратитесь к ответу Джеймса Гентеса за подробностями.
введите debugger; в консоль инструментов dev, и он сразу же положит вещи в отладчик и остановит скрипт. Ответ Джеймса Гентеса кажется лучшим решением в 2019 году Почему все говорят об остановке сценария? Речь идет о прекращении / разрыве всего следующего «следующего / запланированного» кода.В Chrome есть «Диспетчер задач», доступный через Shift + ESC или через
Меню → Дополнительные инструменты → Диспетчер задач
Вы можете выбрать задачу на странице и завершить ее, нажав кнопку «Завершить процесс».
chrome 48 это будет только ЗАКРЫТЬ инструмент Dev, а не завершать его, открывая его снова, вы можете увидеть, что программа все еще работает ( tried setInterval() ) Я не вижу «Диспетчер задач» в разделе «Дополнительные инструменты», а shift + esc ничего не делает . (Chrome 50, OSX) Shift + ESC работает в Chrome / Windows, хотя . Ух ты, я так давно этого хотел, и он был там годами! Это самый полезный ответ StackOverflow, который я видел весь год! В Macintosh (Chrome v.63) эта опция отображается в меню «Окно» в третьей группе. Там нет очевидного сочетания клавиш.Также обратите внимание на сочетания клавиш: F8 и Ctrl + \
Один из способов сделать это - приостановить выполнение сценария, посмотреть, какой код следует за тем, где вы остановились в данный момент, например:
В консоли сделайте следующее:
Затем запустите сценарий: он вызовет фатальную ошибку при попытке доступа somethingElse , и сценарий умрет. Вуаля, вы прекратили сценарий.
РЕДАКТИРОВАТЬ: Первоначально я удалил переменную. Это не достаточно хорошо. Вы должны удалить функцию или объект, для которого JavaScript пытается получить доступ к свойству.
you have to delete a function or an object такой мерзкий взлом! (в пользовательском интерфейсе это было бы хорошо, как кнопка « убить всех» ) Это довольно неприятно, но я не могу придумать другого пути. Год спустя я возвращаюсь к тому же вопросу . И я не могу понять это! Есть ли способ сделать его более общим? Вы не можете понять, как прекратить выполнение скрипта? Я всегда был в состоянии сделать это. У вас есть пример, который не позволяет вам убить сценарий таким образом? @ Хашим, ты должен быть в состоянии поставить точку останова внутри функции. Поэтому убедитесь, что внутренняя часть функции находится на отдельной строке от определения функции. В вашем случае вам потребуется в консоли, как только она будет приостановлена, набрать «document.getElementById ('see_older'). ParentNode.removeChild (document.getElementById ('see_older'));". Это потому, что у вас нет ничего в javascript для взлома. К сожалению, это тоже меняет HTML. Если вы можете изменить код на "var el = document.getElementById ('see_older'); \ n el.getEl . ", то вы можете просто сделать "delete el;" и это остановит это.Если вы столкнулись с этим при использовании debugger заявления,
. тогда я думаю, что страница будет работать вечно до тех пор, пока не закончится время выполнения js или следующий перерыв. Предполагая, что вы находитесь в режиме прерывания по ошибке (переключение значка паузы), вы можете убедиться, что произошел разрыв, вместо этого сделав что-то вроде:
или, может быть, вызвать несуществующую функцию:
(Конечно, это не помогает, если вы пытаетесь пройтись по функциям, хотя, возможно, вы могли бы динамически добавить в throw 1 или z() или что-то подобное на панели «Источники», Ctrl-S, чтобы сохранить, а затем Ctrl-R, чтобы обновить . это может, однако, пропустить одну точку останова, но может работать, если вы находитесь в цикле.)
Если вы выполняете цикл и ожидаете debugger повторного запуска оператора, вы можете просто ввести throw 1 вместо него.
Затем, когда вы нажмете Ctrl-R, будет выполнен следующий бросок, и страница обновится.
(протестировано с Chrome v38, около апреля 2017 г.)
Хороший вопрос здесь. Я думаю, что вы не можете прекратить выполнение скрипта. Несмотря на то, что я никогда не искал его, я довольно долго работал с отладчиком Chrome. Я обычно устанавливаю точки останова в своем коде javascript, а затем отлаживаю часть кода, которая мне интересна. Когда я заканчиваю отладку этого кода, я обычно просто запускаю остальную часть программы или обновляю браузер.
Если вы хотите предотвратить выполнение остальной части скрипта (например, из-за вызовов AJAX, которые будут сделаны), единственное, что вы можете сделать, это удалить этот код в консоли на лету, тем самым предотвращая эти вызовы после выполнения , вы можете выполнить оставшийся код без проблем.
Надеюсь, это поможет!
PS: Я пытался найти вариант для прекращения выполнения в некоторых руководствах / руководствах, таких как следующие, но не смог найти его. Как я уже говорил, вероятно, нет такой возможности.
Я помог? Кажется, что нет опции завершения, но для того, чтобы предотвратить выполнение следующего кода, вы можете либо прокомментировать его ранее, либо удалить следующий код / вызвать "live" в отладчике Chrome (эта последняя опция сделает кнопку продолжения вести себя как прекратить). Я знаю, что они не являются идеальными решениями, но я думаю, что они являются наиболее приемлемыми. Любые комментарии? Во многих случаях код, который необходимо предотвратить, выполняется в стеке вызовов (функции, которые получат управление после возврата текущей функции). Конечно, я могу пойти и отредактировать функции в стеке вызовов, а затем найти и отредактировать все функции, которые могут быть вызваны асинхронно. Я уверен, что браузер должен обновлять страницу с помощью сценария, все еще находящегося в состоянии паузы, если он был приостановлен во время нажатия кнопки «Обновить страницу». Я также думаю, что это должно быть ожидаемое поведение для любого браузера (к сожалению, это не так). На самом деле я нашел обходной путь для прекращения выполнения скрипта !: В chrome я открываю отладчик для отладки одного из моих приложений и устанавливаю точку останова. Я запускаю страницу. Выполнение приостанавливается в точке останова. Затем я изучаю проблему и понимаю, что является причиной ошибки. Чтобы прекратить выполнение, я нажимаю кнопку X рядом с URL (чтобы остановить загрузку страницы), а затем, при продолжении сценария (F8), он прекращается. Я думаю, это довольно простой способ добиться этого. Что вы думаете об этом? Кнопка X в Chrome заменяется кнопкой «Обновить» после загрузки страницы, поэтому после этого невозможно нажать X (я также пробовал ее в IE, в котором X все время доступен, но он всегда зависает). Я также проверил ваше предложение во время загрузки страницы и обнаружил, что сценарий не завершается после нажатия X и затем F8. Вероятно, что сценарии, которые еще не были загружены в браузер во время нажатия X, впоследствии не загружаются, но это должно быть очевидно. О, вы правы, это был быстрый тест, который не был репрезентативным . Тогда кажется, что решения нет.Ссылаясь на ответ, данный @scottndecker на следующий вопрос , в chrome теперь есть опция «отключить JavaScript» в разделе «Инструменты разработчика»:
- Вертикально . в правом верхнем углу
- настройки
- А в разделе «Настройки» перейдите в раздел «Отладчик» в самом низу и выберите «Отключить JavaScript».
Хорошо, что вы можете остановиться и запустить снова, просто установив / сняв отметку.
Если вы не согласны с мнением из-за того, что вы путаетесь между меню инструментов разработчика и меню Chrome, это очень печально :( Не работал для меня Я установил флажок Отключить JavaScript, но скрипт просто продолжает работать.Вы можете сделать это, но сначала вы должны подготовить свой код.
Инструкции по прекращению выполнения скрипта в Google Chrome Dev Tools:
(1) Сначала подготовьте свой код, создав глобальную переменную:
(2) В любом месте, где вы можете выйти, проверьте значение этой переменной:
(3) Приостановить выполнение скрипта во время или перед вышеупомянутыми тестовыми строками.
(4) Переключиться на консоль
(6) Продолжить выполнение скрипта. Сценарий будет, return false когда он выполняет тест из шага (2) выше
(A) Этот прием работает с глобальными переменными и объектами, но он не будет работать с локальными переменными. Обратите внимание, что this:
newVar = 'never used before';
создает новое свойство объекта window (работает с указанным выше трюком), а это:
var newVar = 'never used before';
создает локальную переменную (НЕ работает с указанным выше трюком!)
(B) Таким образом, вы все еще можете использовать этот трюк с уже запущенным кодом, если у вас есть либо глобальная переменная, либо объект, который вернет false, если у него есть заданное значение.
(a) Вставьте точку останова в код: просто введите debugger; строку отдельно. Если DevTools открыт, сценарий перейдет в отладчик в этот момент. Если DevTools не открыт, код будет игнорировать оператор.
(б) Хотите избежать использования библиотеки jQuery при отладке кода? Черный ящик это. См. Инструкции черного ящика для Chrome - или - для Firefox
Качество веб-сайтов за последние десять лет значительно возросло, они стали более интерактивными, быстрыми, функциональными и привлекательными. Во многом это заслуга JavaScript в Google Chrome, поэтому для получения максимального наслаждения от веб-серфинга, разумно его обновить и включить на постоянной основе. Более того, множество сайтов предлагают лишь ограниченный функционал или не работают вовсе с выключенным Ява Скриптом в браузерах. Не все совсем радужно, поэтому есть причины для выключения JS. Все подробности далее.
Зачем нужен JavaScript в Google Chrome
Мы рекомендуем включить JavaScript в Гугл Хром по следующим причинам:
- Возможность просматривать сайты. Много веб-ресурсов отказывается предлагать собственные услуги пользователям с выключенным JS, сюда можно отнести даже VK.
- Открыть доступ ко всем функциям сайтов. Скрипты обычно участвуют в авторизации, фильтрации и анимации.
- Получить максимум интерактивности. Все изменения, происходящие без обновления страницы – это заслуга Яваскрипта. Исключения – видеоплееры на HTML5.
- Увеличить скорость загрузки сайтов. Часто Java используется в Google Chrome для постзагрузки данных. Лучше всего это понятно на примере. Стандартно сайты отображаются после полной загрузки страницы. JS позволяет изначально прогрузить основные элементы: интерфейс и текст, а уже затем докачать и отобразить картинки, видео и прочее. Это значительно сокращает время ожидания построения сайта.
Наверное, перечисленных причин более чем достаточно, чтобы включить Джава в Гугл Хром и никогда его не выключать.
Как включить Джава Скрипт в Гугл Хром
Причины настолько убедительные, что рекомендуем без лишних вопросов активировать JS в веб-обозревателе. Это можем сделать двумя способами. Первый метод подразумевает изменение глобальной настройки, то есть Джава будет запускаться всегда и на всех сайтах. Второй путь позволяет разрешить загрузку JavaScript в качестве исключения на некоторых веб-ресурсах.
Решение 1: включение для всех сайтов
Это более предпочтительный вариант, позволяющий включить все скрипты в Гугл Хром. Изменение одной настройки является достаточной мерой для восстановления нормальной работы браузера от Гугл.
Стоит упомянуть, что JS является встроенной и по умолчанию активной функцией. Если ее вручную не меняли, но технология выключена, скорее всего в системе завелся вирус. Дополнительно лучше просканировать систему свежей версией Malwarebytes .
Как включить Java в Гугл Хром:
Изменения применяются автоматически, поэтому можем сразу закрывать страницу с настройками и переходить к привычному веб-серфингу.
Решение 2: запуск для отдельных веб-ресурсов
На некоторых сайтах еще может быть не включен JS. Виной тому является индивидуальный параметр Java, который имеет выше приоритет в сравнении с глобальной настройкой. Еще этот инструмент можем использовать для включения Яваскрипта только на одном или нескольких сайтах.
- Открываем сайт, на котором должен быть активен JS.
- Слева от его домена в адресной строке нажимаем на изображение замка или глобуса.
Как обновить JavaScript в Гугл Хром
Пользователи старой школы привыкли, что обновлять JS нужно отдельно от самого браузера. Это приходилось делать с большинством модулей. Неполная интеграция требовала лишнее время и вызывала проблемы, поэтому разработчики Google решили от подобной тактики отказаться. Даже при желании скачать JavaScript для Гугл Хром это сделать не получится. Если и загрузить, и установить JS, он все равно никак не отразится на версии, встроенной в браузере Chrome, которая существует независимо от внешней среды.
Если есть желание обновить Ява Скрипт, лучшим решением станет скачивание и инсталляция новой версии веб-обозревателя от Google. Альтернативный вариант – открыть меню, навести курсор на пункт «Справка» и выбрать «О браузере Google Chrome». Произойдет автоматический поиск новых версий и предложение по их установке. Обычно же Хром обновляется в фоновом режиме, поэтому ничего делать пользователям уже не нужно.
Как отключить Ява Скрипт в Гугл Хром
Деактивировать Джава целесообразно только по причине недоверия к сайтам, которые используют рассматриваемую технологию. Некоторые из них недобросовестно применяют JavaScript. Принципы отключения Java аналогичны его включению. Предлагаем быстро разобраться с тем, как выключить JS в Хроме.
- Полное отключение. Переходим на страницу настроек «JavaScript». Сюда можем попасть по аналогии с первым способом включения JS или по ссылке chrome://settings/content/javascript. Остается только перевести в неактивное состояние строку «Разрешено (рекомендуется)».
- Выключение на одном сайте. Чтобы деактивировать технологию, стоит нажать на кнопку «Сведения о сайте» (справа от домена), перейти на страницу «Настройки сайтов» и установить положение JavaScript в состояние «Блокировать».
В целом мы считаем JS полезной функцией и рекомендуем своим читателям включить Ява Скрипт в Гугл Хром и пользоваться им на постоянной основе. Как мы выяснили, обновить Java отдельно от браузера нельзя, поэтому никаких вмешательств для восстановления его работоспособности не требуется. Если JS не работает несмотря на все манипуляции, разумно переустановить весь браузер. И только в крайнем случае Ява Скрипт уместно выключить полностью.
Если скрипт зависнет, то FF должен показать вам окно о том, что его надо остановить. Вы можете понизить время ожидания результата выполнения скрипта.
Я не нашёл в гугле как остановить скрипт. Может быть такого и нет, но если вы не знаете, что у вас отъедает CPU, попробуйте занизить время с 10 секунд до, допустим, 5 и запустите ваш скрипт через профайлер, он, возможно, покажет какой код тормозит.
Мне не понятно, что у вас происходит. Цикл может быть бесконечным, это не страшно, страшно, что окно не отвечает - это означает, что не хватает CPU ресурсов и либо вы делаете троттлинг вашего скрипта, либо перекладываете вычислительную работу на кого-либо (сервер, воркер, что у вас там).
Vest, что удивительно, я тоже ничего не нагуглил. Похоже прерывание скрипта невозможно. Вот только не могу понять причин этого, но она наверное должна быть, почему так сделали. Ещё надо заметить, что я использую Vue для интерфейса в браузере. Я не спец, но может это как-то связано с рендером. Типа пока не вернутся вычисления, не может закончить работу с DOM. Но с другой стороны там Virtual DOM.
А я сейчас отлаживаю скрипт, проводящий вычисления на клиенте. Там довольно навороченный рекурсивный алгоритм. Отлаживаю и. иногда он не выходит из рекурсии, всё зависает. Приходится закрывать окно, а потом заново всё открывать. Но скрипт на самом деле очень быстрый (если правильно работает), т.е. сложный алгоритмически, но не загрузный по времени. Воркеры или сервер не нужен.
За ссылочку про понижение времени — спасибо.
Николай Чуприк, меня закидают тапками, но я думаю, что всё дело в однопоточности JavaScript или конкретной вкладки. Когда у вас единственный поток занят рекурсивными вычислениями, то у него нет эдакого кванта времени, чтобы обработать ещё нажатие несуществующей кнопки Stop в вашем отладчике. Наверняка, это всё крутится в одном потоке, а если и нет, то возможно этот поток не отпущен браузером, чтобы принять вашу команду.
Я бы предложил вам добавить проверку на некоторую глобальную переменную, и если она "true", выйти из рекурсии, но смешно то, что JavaScript-консоль скорее всего зависнет и вы не сможете в ней выставить вашу переменную в "true"
¯\_(ツ)_/¯
Vest, JS поток конечно один, но для JS браузер является супервизором. Мне не понятно, почему он не может его тормознуть. Или кнопки Developer Tools реализованы в том же потоке JS :). Странно конечно.
Мне сейчас приходится ставить в рекурсию окно confirm('Стоп?'), и пока долбишь "нет", рекурсия продолжается, что неудобно. Причём если ставить breakpoint в рекурсивную функцию, то я могу всего лишь остановить выполнение скрипта, но не прервать его. После breakpoint у меня выбора нет, могу только продолжить выполнение, даже если понимаю, что это уход рекурсии в нирвану.
Николай Чуприк, хорошая идея. Пусть у вас будет счётчик в рекурсии. Вы будете каждый раз его увеличивать, когда куда-либо проваливаетесь. Как наберёте 100 вызовов - показываете confirm, а потом ещё раз 100 циклов и т. д.
Читайте также: