¿Qué equivale a presionar Ctrl + C en la consola, para Chrome y Firefox? Al implementar varios algoritmos, a menudo escribo algún buggy (while
) loop, en Javascript, que no sale, hace que el navegador se congele. Recargar no funciona, hacer clic en la pequeña X para cerrar la pestaña no hace nada, y en un momento (literalmente) me quedo sin memoria, el sistema se intercambia y me voy a tomar un café.¿Cómo se interrumpe JS en el navegador?
Respuesta
No hay tal cosa como un Ctrl + C
JavaScript. Los navegadores que ejecutan JavaScript generalmente son protectores de sí mismos. Si se bloquea el JavaScript, lanzarán un diálogo que le preguntará si el usuario desea detener el JavaScript.
La duración del tiempo de espera generalmente se puede encontrar en la configuración del navegador. Puede encontrar cómo hacerlo para Firefox aquí: http://www.trixya.net/index.php/internet/how-to-set-javascript-timeout-in-firefox
Lanzan ese diálogo un poco tarde, cuando mi sistema ya está intercambiando. – skrat
En Chrome, puede pulsar Shift+ESC
(o hacer clic con el botón derecho en la barra de título y abrir el Administrador de tareas de Chrome) y eliminar el proceso asociado a la pestaña colgada. Esto funcionará en casos donde cerrar la pestaña no lo haría.
La advertencia es que, a veces, Chrome simplificará varias pestañas en un solo proceso, y esto matará todas las pestañas asociadas con el proceso.
Otro enfoque que puede tomar para evitar while
bucles colgando el navegador es escribir código como este (se puede llevar a cabo después de la prueba):
var maxIterations = 100000;
while (foo) {
if (!maxIterations--) throw new Error('Max iterations hit, aborting.');
// do stuff
}
Haga clic en Administrador de tareas de Chrome y seleccione el elemento en la parte inferior del menú contextual para revelar un extraño huevo de Pascua.
'while (foo && --maxIterations) {...}' – vol7ron
@ vol7ron Mantuve el elemento maxIterations en líneas separadas del resto del código para que pueda ser eliminado más adelante si fuera necesario –
Entiendo lo que eres obra. Para mí, sería más fácil eliminar y mantener todo cerca. Tener un bloque if separado lo divide un poco - tienes que leer en el bloque while, en lugar de solo mirar las condiciones previas y las condiciones – vol7ron
De lo poco conocimiento que tengo en sus formas de trabajo, cómo iba a proceder es:
- Sólo ejecutar la secuencia de comandos en un evento como botón de clic. Este script impediría correr
onload
- Chrome le permite establecer puntos de interrupción en el código
js
en la pestaña de secuencias de comandos de herramientas de desarrollo
No existe un "interruptor" real para ejecutar código JavaScript en un navegador. ECMAscript se ejecuta en el llamado "subproceso de interfaz de usuario", lo que significa que todas las operaciones de representación se realizan en la misma cola en que se ejecuta el código de ECMAscript.
Esto a su vez significa que un bucle infinito en ECMAscript bloquea automáticamente la interacción de todo el navegador.
La única manera de evitar eso es escribir un código claro y limpio. Si sucede de todos modos, la mayoría de los navegadores se dan cuenta de que el hilo de la interfaz de usuario está ocupado demasiado tiempo y le pregunta al usuario si desea cancelar los procesos en ejecución de JavaScript. Si no quiere esperar, su única opción es eliminar todo el proceso del navegador/pestaña.
Sin embargo, si usted es consciente de que una parte de la secuencia de comandos no posiblemente provocar un bucle infinito, puede configurar manualmente breakpoints
en algún tipo de developer tools
o puede insertar la palabra clave debugger;
directamente en su guión.Eso provoca que el intérprete de JavaScript se detenga en la línea actual y usted tiene la oportunidad de analizar el próximo código (mientras que las condiciones, por ejemplo) y cancelar la ejecución si se ve mal.
No puedo hacer nada, probar un ciclo 'while (1) {}' e intentar obtener una salida limpia (cerrar pestaña, cerrar ventana, etc.) – skrat
- 1. se interrumpe el código de la podredumbre
- 2. ¿Cuándo se interrumpe Java Strings?
- 3. ¿Cómo se valida html que se genera a partir de JS ejecutándose en el navegador?
- 4. ¿Cómo se interrumpe una BlockingQueue que está bloqueando en take()?
- 5. js: entender cómo alert() impacta el evento de navegador loop
- 6. HTML.fromHtml La línea se interrumpe al desaparecer
- 7. la mejor manera de detectar el navegador en js
- 8. ¿Cómo se interrumpe un comando Vim que toma demasiado tiempo?
- 9. ¿Quién interrumpe mi hilo?
- 10. Rails, jQuery, archivos .js.erb, JS no ejecutados por el navegador
- 11. ¿Cómo se libera el espacio asignado dinámicamente cuando se interrumpe un programa con Ctrl-C?
- 12. Requiere el navegador de código de js ruins
- 13. En un manejador de señal, ¿cómo saber dónde se interrumpe el programa?
- 14. ¿Por qué el hilo no se interrumpe cuando duerme en el bloque
- 15. Cómo llevar Firebug Inspector en JS Fiddle Ventana de salida en el navegador Chrome
- 16. ¿Cómo se abre el navegador web Eclipse?
- 17. ¿Un navegador descarga archivos JS si el usuario tiene JS deshabilitado?
- 18. ¿Cómo incluir el archivo js en otro archivo js?
- 19. Interrumpe en C/C++ ??? ¿Cómo están implementados/codificados?
- 20. ¿Por qué el paquete del compilador se interrumpe en Python 3?
- 21. Número de página en BIOS interrumpe
- 22. ¿Cómo habilitar el almacenamiento en caché del navegador de contenido estático (imágenes, css, js) con Tomcat?
- 23. ¿Cómo verificar el navegador para el soporte de inicio con JS/jQuery?
- 24. Obtener altura de página en JS (Navegador cruzado)
- 25. ¿Qué herramientas usas para depurar HTML/JS en tu navegador?
- 26. Comprobar la caché del navegador para un archivo js
- 27. ¿Cómo se interrumpe o se detiene la ejecución actual del trabajo de cuarzo?
- 28. ¿Cómo se implementa CSS y DOM en el navegador?
- 29. ¿Cómo se emula el botón Atrás del navegador en HtmlUnit?
- 30. SVG en el navegador Android
ctrl + alt + del – user544262772
Tengo que admitir que esto fue más como una "motivación" para los desarrolladores de navegadores, para arreglar la situación. – skrat
Los ejecutores de JS francamente existentes son estúpidos porque no pueden hacer algo tan simple. – Pacerier