Возможно ли каким-либо образом остановить или прекратить JavaScript таким образом, чтобы предотвратить дальнейшее выполнение на основе JavaScript, без перезагрузки браузера?
Я думаю о эквиваленте JavaScript exit()
в PHP.
Возможно ли каким-либо образом остановить или прекратить JavaScript таким образом, чтобы предотвратить дальнейшее выполнение на основе JavaScript, без перезагрузки браузера?
Я думаю о эквиваленте JavaScript exit()
в PHP.
Короткий ответ:
throw new Error("Something went badly wrong!");
Если вы хотите узнать больше, продолжайте читать.
Выражение 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.
Вы можете сделать опечатку JavaScript: D (мышление вне поля здесь)
thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario();
Или что-то вроде:
new new
Что-то вроде этого может работать:
function javascript_abort()
{
throw new Error('This is not an error. This is just to abort javascript');
}
Взято отсюда:
Нет.
Даже если вы создадите исключение, он только убьет текущий цикл событий. Обратные вызовы, переданные обработчикам событий setTimeout или DOM/XMLHttpRequest, по-прежнему будут выполняться, когда придет время.
Я делаю:
setTimeout(function() { debugger; }, 5000)
Таким образом у меня есть 5 секунд для взаимодействия с пользовательским интерфейсом, а затем в остановках. Время, которое я использовал, было тогда, когда мне нужно было оставить пользовательскую всплывающую подсказку видимой, чтобы сделать некоторые изменения стиля.
Если у вас есть функция, вы можете выйти из нее с помощью return;
, но это не остановит выполнение родительской функции, которая вызвала эту функцию.
Вы можете вызвать return
в начале функции, и по крайней мере эта функция перестанет работать. Вы также можете просто использовать throw ''
, чтобы вызвать ошибку и остановить текущий процесс. Но это не остановит все. setTimeout
и setInterval
могут выполнять отложенные функции и функции, выполняемые на временном интервале, соответственно. Они будут продолжать работать. События Javascript также будут работать как обычно.
Я использую
return false;
если я хочу прервать работу JavaScript далее вниз.
Процесс утомительный, но в Firefox:
остановить или прервать JavaScript, чтобы [[]] [[]] предотвратить [s] дальнейшее Выполнение на основе JavaScript из-за отсутствия, без перезагрузки браузера.
Примечания:
Другие браузеры имеют и используют разные соглашения.
Определите переменную внутри функции JavaScript, установите для этой переменной значение 1, если вы хотите выполнить функцию и установить ее в 0, если вы хотите ее остановить.
var execute;
function do_something()
{
if (execute == 1)
{
// execute your function
}
else
{
// do nothing
}
}
Я знаю, что это старо, но я хотел сделать это, и я нашел, на мой взгляд, несколько улучшенное решение ответов на бросок. Просто временно отключите сообщения об ошибках и повторно активируйте их позже, используя 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');