insertar - llamar javascript desde html
Cómo finalizar el script en Javascript (11)
Necesito un código que salga del script js de manera similar a PHP ''exit'' o ''die''. (Sé que no es la mejor práctica de programación, pero la necesito).
ACTUALIZACIÓN: ¡Esto funciona siempre y cuando no lo catch
!
throw window.location.assign(''dead.html'');
Coloque el debugger;
palabra clave en su código JavaScript donde desea detener la ejecución. A continuación, abra sus herramientas favoritas para desarrolladores de navegador y vuelva a cargar la página. Ahora debería pausarse automáticamente, abrir la sección Fuentes de sus herramientas, resaltar el debugger;
palabra clave y le da la opción de reanudar la ejecución del script.
Espero que ayude.
Mas información en:
En mi caso, utilicé la API Window.stop, que es como hacer clic en el botón X de su navegador:
Ver: https://developer.mozilla.org/en/docs/Web/API/Window/stop
Esta respuesta proporciona detalles que demuestran un marco adicional que ayudará a resolver esta y otras necesidades de salida anticipada, excepciones, control de procesos y manejo secuencial de funciones en javascripts modulares. La solución proporciona ejemplos de cierre. Esta respuesta supone que el individuo desea que otros scripts en la página continúen ejecutándose después de que el script en cuestión haya salido.
Ejemplo en vivo de solución simple aquí: https://codepen.io/corpus_khu/pen/VpMQzO
<script>
var safetyRun = (function(){
var curExecution = null;
var exceptionHandlers = {
cleanup:function(){
/*do exit cleanup*/
console.log("Cleanup could set straglers to {}");
return;
}
}
var exitErr = function(errcode){
curExecution.exNames.push("cleanup");
throw new Error("EarlyExit");
}
var run = function(fun){
curExecution = this;
curExecution.exNames = [];
fun(exitErr);
for ( x in exNames){
exceptionHandlers[x]();
}
return;
}
return run;
})();
var exitThisScript = function(exit){
//write some modular code
console.log("before exit");
exit();
console.log("after exit");
return;
}
safetyRun(exitThisScript);
</script>
Arriba hay una manera muy simple de salir. Antes de enviar su función a este "Runner", recomiendo envolver su función en un arnés de prueba envolviendo un objeto que cargue un arnés y pueda ser ejecutado, el arnés de prueba debe exponer métodos como exit () a su función para que no tengan para pasar.
Ejemplos de todo lo que necesita para construir una buena estrategia de salida están disponibles en github aquí (archivo: pseudo_threads2.js): https://github.com/fromSpace/js-recursionwithevents-practice
Versión de prueba en vivo aquí: https://fromspace.github.io/js-recursionwithevents-practice/
Observe en pseudo_threads2.js que la función simConstantMomentum () devuelve una función que tiene vars de alcance léxico con todas las funciones de arnés. En su lugar, le recomiendo que llame a un generador de arnés en la parte superior de esta función y asigne su resultado a una var local para que la función que desea salir se vea más parecida a esta cuando haya terminado.
var rockStarFunction = new function (){
var harness = reducePublicStrapOnFromCache()._url(location);
return function(){
harness.scriptContextChangeEvent();
harness.imInteligentFunction("{slib_err-15346 : ''Cannot handle request, ::suggest(mesh//abc) exit back to pool''}");
harness.exit();
console.log("You should never get this far");
return true;
};
}
La solución que he proporcionado aquí es la que recomiendo si su intención es construir un contenedor de JavaScript con capacidades tales como exit, assert, mock y las incluidas. Creo que esta es la mejor manera de construir este portacontenedores y hacer que mi funciones transmisibles. - corpus_khu
Este es un ejemplo, que, si existe una condición, entonces termine la secuencia de comandos. Yo uso esto en mi lado SSE javascript, si el
<script src="sse-clint.js" host="https://sse.host" query=''["q1,"q2"]'' ></script>
no se puede analizar directamente desde el análisis JSON ...
if( ! SSE_HOST ) throw new Error([''[!] SSE.js: ERR_NOHOST - finished !'']);
... de todos modos, la idea general es:
if( error==true) throw new Error([ ''You have This error'' , ''At this file'', ''At this line'' ]);
esto terminará / morirá tu script javasript
Hay muchas formas de salir de un script JS o Node. Aquí están los más relevantes:
// This will never exit!
setInterval((function() {
return;
}), 5000);
// This will exit after 5 seconds, with signal 1
setTimeout((function() {
return process.exit(1);
}), 5000);
// This will also exit after 5 seconds, and print its (killed) PID
setTimeout((function() {
return process.kill(process.pid);
}), 5000);
// This will also exit after 5 seconds and create a core dump.
setTimeout((function() {
return process.abort();
}), 5000);
// This will exit, but act as if CTRL-C
.exit
Incluso en programas simples sin identificadores, eventos y demás, lo mejor es poner el código en una función "principal", incluso cuando es el único procedimiento:
<script>
function main()
{
//code
}
main();
</script>
De esta manera, cuando quiera detener el programa, puede usar "regresar".
Las funciones de "salida" generalmente abandonan el programa o la secuencia de comandos junto con un mensaje de error como parámetro. Por ejemplo morir (...) en php
die("sorry my fault, didn''t mean to but now I am in byte nirvana")
El equivalente en JS es señalar un error con la palabra clave throw de esta manera:
throw new Error();
Puedes probar esto fácilmente:
var m = 100;
throw '''';
var x = 100;
x
>>>undefined
m
>>>100
Si está buscando una manera de terminar por la fuerza la ejecución de todo el Javascript en una página, no estoy seguro de que exista una forma oficialmente aprobada de hacerlo, parece ser el tipo de cosa que podría ser un riesgo para la seguridad (aunque se honesto, no puedo pensar cómo sería de lo mejor). Normalmente en Javascript cuando quieres que tu código deje de ejecutarse, simplemente return
de cualquier función que se esté ejecutando. (La declaración de return
es opcional si es lo último en la función y la función no debe devolver un valor) Si hay algún motivo por el que devolver no es lo suficientemente bueno para usted, probablemente debería editar más detalles en la pregunta de por qué piensa que lo necesita y tal vez alguien puede ofrecer una solución alternativa.
Tenga en cuenta que, en la práctica, la mayoría de los intérpretes de JavaScript de los navegadores simplemente dejarán de ejecutar el script actual si encuentran un error. Entonces puede hacer algo como acceder a un atributo de una variable no configurada:
function exit() {
p.blah();
}
y probablemente abortará la secuencia de comandos. Pero no debes contar con eso porque no es para nada estándar, y realmente parece una práctica terrible.
EDITAR : OK, tal vez esta no fue una buena respuesta a la luz de Ólafur. Aunque la función die()
que se vincula básicamente implementa mi segundo párrafo, es decir, simplemente arroja un error.
Si no te importa que sea un error, solo escribe:
fail;
Eso evitará que su código principal (global) continúe. Útil para algunos aspectos de la depuración / prueba.
JavaScript equivalente para el die
de PHP . Por cierto, simplemente llama a exit()
(gracias splattne):
function exit( status ) {
// http://kevin.vanzonneveld.net
// + original by: Brett Zamir (http://brettz9.blogspot.com)
// + input by: Paul
// + bugfixed by: Hyam Singer (http://www.impact-computing.com/)
// + improved by: Philip Peterson
// + bugfixed by: Brett Zamir (http://brettz9.blogspot.com)
// % note 1: Should be considered expirimental. Please comment on this function.
// * example 1: exit();
// * returns 1: null
var i;
if (typeof status === ''string'') {
alert(status);
}
window.addEventListener(''error'', function (e) {e.preventDefault();e.stopPropagation();}, false);
var handlers = [
''copy'', ''cut'', ''paste'',
''beforeunload'', ''blur'', ''change'', ''click'', ''contextmenu'', ''dblclick'', ''focus'', ''keydown'', ''keypress'', ''keyup'', ''mousedown'', ''mousemove'', ''mouseout'', ''mouseover'', ''mouseup'', ''resize'', ''scroll'',
''DOMNodeInserted'', ''DOMNodeRemoved'', ''DOMNodeRemovedFromDocument'', ''DOMNodeInsertedIntoDocument'', ''DOMAttrModified'', ''DOMCharacterDataModified'', ''DOMElementNameChanged'', ''DOMAttributeNameChanged'', ''DOMActivate'', ''DOMFocusIn'', ''DOMFocusOut'', ''online'', ''offline'', ''textInput'',
''abort'', ''close'', ''dragdrop'', ''load'', ''paint'', ''reset'', ''select'', ''submit'', ''unload''
];
function stopPropagation (e) {
e.stopPropagation();
// e.preventDefault(); // Stop for the form controls, etc., too?
}
for (i=0; i < handlers.length; i++) {
window.addEventListener(handlers[i], function (e) {stopPropagation(e);}, true);
}
if (window.stop) {
window.stop();
}
throw '''';
}