Можно ли остановить выполнение JavaScript?
Возможно ли каким-либо образом остановить или прекратить JavaScript таким образом, чтобы предотвратить дальнейшее выполнение на основе JavaScript, без перезагрузки браузера?
Я думаю о эквиваленте JavaScript exit()
в PHP.
Ответы
Ответ 1
Короткий ответ:
throw new Error("Something went badly wrong!");
Если вы хотите узнать больше, продолжайте читать.
Вы хотите остановить выполнение JavaScript для разработки/отладки?
Выражение debugger;
в вашем коде остановит выполнение страницы, а затем ваши инструменты разработчика браузера позволят вам просмотреть состояние вашей страницы в момент ее замораживания.
Вы хотите остановить приложение произвольно и по дизайну?
Ошибка?
Вместо того, чтобы пытаться остановить все, пусть ваш код обрабатывает ошибку. Читайте о Exception
по googling. Это умный способ позволить вашему коду "перейти" к процедурам обработки ошибок, не используя утомительные блоки if/else.
После прочтения о них, если вы считаете, что прерывание всего кода является абсолютно единственным вариантом, бросание исключения, которое не будет "поймано" в любом месте, кроме области применения "root", является решением:
// creates a new exception type:
function FatalError(){ Error.apply(this, arguments); this.name = "FatalError"; }
FatalError.prototype = Object.create(Error.prototype);
// and then, use this to trigger the error:
throw new FatalError("Something went badly wrong!");
убедитесь, что у вас нет блоков catch()
, которые улавливают любое исключение; в этом случае измените их, чтобы сбросить исключение "FatalError"
:
catch(exc){ if(exc instanceof FatalError) throw exc; else /* current code here */ }
Когда задача завершается или происходит какое-либо событие?
return;
завершает текущий поток выполнения функции.
if(someEventHappened) return; // Will prevent subsequent code from being executed
alert("This alert will never be shown.");
Примечание: return;
работает только внутри функции.
В обоих случаях...
... вы можете также знать, как остановить асинхронный код. Это делается с помощью clearTimeout
и clearInterval
. Наконец, чтобы остановить запросы XHR (Ajax), вы можете использовать метод xhrObj.abort()
(который также можно найти в jQuery.
Ответ 2
Вы можете сделать опечатку JavaScript: D (мышление вне поля здесь)
thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario();
Или что-то вроде:
new new
Ответ 3
Что-то вроде этого может работать:
function javascript_abort()
{
throw new Error('This is not an error. This is just to abort javascript');
}
Взято отсюда:
http://vikku.info/codesnippets/javascript/forcing-javascript-to-abort-stop-javascript-execution-at-any-time/
Ответ 4
Нет.
Даже если вы создадите исключение, он только убьет текущий цикл событий. Обратные вызовы, переданные обработчикам событий setTimeout или DOM/XMLHttpRequest, по-прежнему будут выполняться, когда придет время.
Ответ 5
Я делаю:
setTimeout(function() { debugger; }, 5000)
Таким образом у меня есть 5 секунд для взаимодействия с пользовательским интерфейсом, а затем в остановках. Время, которое я использовал, было тогда, когда мне нужно было оставить пользовательскую всплывающую подсказку видимой, чтобы сделать некоторые изменения стиля.
Ответ 6
Если у вас есть функция, вы можете выйти из нее с помощью return;
, но это не остановит выполнение родительской функции, которая вызвала эту функцию.
Ответ 7
Вы можете вызвать return
в начале функции, и по крайней мере эта функция перестанет работать. Вы также можете просто использовать throw ''
, чтобы вызвать ошибку и остановить текущий процесс. Но это не остановит все. setTimeout
и setInterval
могут выполнять отложенные функции и функции, выполняемые на временном интервале, соответственно. Они будут продолжать работать. События Javascript также будут работать как обычно.
Ответ 8
Я использую
return false;
если я хочу прервать работу JavaScript далее вниз.
Ответ 9
Процесс утомительный, но в Firefox:
- Откройте пустую вкладку/окно, чтобы создать новую среду для script
с текущей страницы
- Заполните эту новую среду с помощью script для выполнения
- Активируйте script в новой среде
- Закрыть (то есть убить) эту новую среду для...
остановить или прервать JavaScript, чтобы [[]] [[]] предотвратить [s] дальнейшее Выполнение на основе JavaScript из-за отсутствия, без перезагрузки браузера.
Примечания:
- Шаг 4 только останавливает выполнение JavaScript в этой среде, а не скрипты любых других окон
- Исходная страница не перезагружается, но новая вкладка/окно загружается с помощью script
- Когда закрывается вкладка/окно, все в этой среде отсутствует: все остатки, частичные результаты, код и т.д.
- Результаты должны вернуться к родительскому или другому окну для сохранения
- Для повторного запуска кода вышеуказанные шаги необходимо повторить
Другие браузеры имеют и используют разные соглашения.
Ответ 10
Определите переменную внутри функции JavaScript, установите для этой переменной значение 1, если вы хотите выполнить функцию и установить ее в 0, если вы хотите ее остановить.
var execute;
function do_something()
{
if (execute == 1)
{
// execute your function
}
else
{
// do nothing
}
}
Ответ 11
Я знаю, что это старо, но я хотел сделать это, и я нашел, на мой взгляд, несколько улучшенное решение ответов на бросок. Просто временно отключите сообщения об ошибках и повторно активируйте их позже, используя setTimeout:
setTimeout(function() {
window.onerror = function(message, url, lineNumber) {
return false;
};
}, 50); // sets a slight delay and then restores normal error reporting
window.onerror = function(message, url, lineNumber) {
return true;
};
throw new Error('controlledError');