pagina - ¿Es posible detener la ejecución de JavaScript?
javascript pdf (11)
Algo como esto podría funcionar:
function javascript_abort()
{
throw new Error(''This is not an error. This is just to abort javascript'');
}
Tomado de aquí:
Esta pregunta ya tiene una respuesta aquí:
- Cómo terminar el script en Javascript 12 respuestas
¿Es posible, de alguna manera, detener o terminar JavaScript de manera que impida que ocurra cualquier otra ejecución basada en JavaScript sin volver a cargar el navegador?
Estoy pensando en un equivalente de JavaScript de exit()
en PHP.
Defina una variable dentro de la función JavaScript, establezca esta variable en 1 si desea ejecutar la función y configúrela en 0 si desea detenerla
var execute;
function do_something()
{
if (execute == 1)
{
// execute your function
}
else
{
// do nothing
}
}
El proceso es tedioso, pero en Firefox:
- Abra una pestaña / ventana en blanco para crear un nuevo entorno para el script desde la página actual
- Rellena ese nuevo entorno con el script para ejecutar
- Activar el script en el nuevo entorno.
- Cerrar (es decir, matar) ese nuevo entorno para ...
detenga o finalice JavaScript de esta manera [de una manera] [para que] evite que se produzca cualquier otra ejecución basada en JavaScript, sin volver a cargar el navegador
Notas:
- El paso 4 solo detiene la ejecución de JavaScript en ese entorno y no los scripts de ninguna otra ventana
- La página original no se vuelve a cargar pero se carga una nueva pestaña / ventana con el script
- Cuando se cierra una pestaña / ventana, todo lo que hay en ese entorno desaparece: todos los remanentes, resultados parciales, código, etc.
- Los resultados deben volver a migrar al elemento principal u otra ventana para su conservación.
- Para volver a ejecutar el código, se deben repetir los pasos anteriores.
Otros navegadores tienen y usan diferentes convenciones.
Hago:
setTimeout(function() { debugger; }, 5000)
De esta manera tengo 5 segundos para interactuar con la interfaz de usuario y luego en las paradas. El tiempo que utilicé fue cuando necesitaba dejar visible la información sobre herramientas personalizada, para hacer algunos cambios de estilo.
No.
Incluso si lanza una excepción, solo eliminará el bucle de eventos actual. Las devoluciones de llamadas pasadas a los controladores de eventos setTimeout o DOM / XMLHttpRequest todavía se ejecutarán cuando llegue el momento.
Puede llamar al return
temprano en una función, y al menos esa función dejará de ejecutarse. También puede simplemente usar throw ''''
para causar un error y detener el proceso actual. Pero esto no lo detendrá todo. setTimeout
y setInterval
pueden realizar funciones retrasadas y funciones que se ejecutan en un intervalo de tiempo, respectivamente. Esos seguirán corriendo. Los eventos de Javascript también continuarán funcionando como siempre.
Puedes hacer un error tipográfico de JavaScript: D (pensando fuera del cuadro aquí)
thisFunctionDoesNotExistAndWasCreatedWithTheOnlyPurposeOfStopJavascriptExecutionOfAllTypesIncludingCatchAndAnyArbitraryWeirdScenario();
O algo como:
new new
Respuesta corta:
throw new Error("Something went badly wrong!");
Si quieres saber más, sigue leyendo.
¿Desea detener la ejecución de JavaScript para desarrollar / depurar?
La expresión debugger;
en su código, detendrá la ejecución de la página, y luego las herramientas de desarrollo de su navegador le permitirán revisar el estado de su página en el momento en que se bloqueó.
¿Quieres detener tu aplicación arbitrariamente y por diseño?
¿En error?
En lugar de intentar detener todo, deje que su código maneje el error. Lea acerca de Exception
s de Google. Son una forma inteligente de permitir que su código "salte" a los procedimientos de manejo de errores sin usar tediosos bloques if / else.
Después de leer sobre ellos, si cree que interrumpir todo el código es absolutamente la única opción, lanzar una excepción que no vaya a ser "atrapada" en ninguna parte excepto en el ámbito "raíz" de su aplicación es la solución:
// 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!");
asegúrate de no tener bloques catch()
que atrapen cualquier excepción; en este caso, modifíquelos para volver a lanzar su excepción "FatalError"
:
catch(exc){ if(exc instanceof FatalError) throw exc; else /* current code here */ }
¿Cuando una tarea se completa o ocurre un evento arbitrario?
return;
Terminará el flujo de ejecución de la función actual.
if(someEventHappened) return; // Will prevent subsequent code from being executed
alert("This alert will never be shown.");
Nota: return;
Funciona solo dentro de una función.
En ambos casos...
... es posible que también desee saber cómo detener el código asíncrono. Se hace con clearTimeout
y clearInterval
. Finalmente, para detener las solicitudes de XHR ( Ajax ), puede usar el método xhrObj.abort()
( que también está disponible en jQuery ).
Sé que esto es viejo, pero quería hacer esto y he encontrado, en mi opinión, una solución ligeramente mejorada de las respuestas de lanzamiento. Simplemente elimine temporalmente los mensajes de error y reactívelos más tarde con 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'');
Si estás en una función, puedes salir usando return;
pero eso no detiene la ejecución de la función principal que llamó a esa función.
estoy usando
return false;
si quiero abortar de JavaScript se ejecute más hacia abajo.