¿Tiene JavaScript un mecanismo para determinar el número de línea de la instrucción que se está ejecutando actualmente (y si es así, de qué se trata)?¿Cómo puedo determinar el número de línea actual en JavaScript?
Respuesta
var thisline = new Error().lineNumber
Si eso no funciona en cualquier ambiente que está utilizando, puede intentar:
var stack = new Error().stack
A continuación, buscar a través de la pila para obtener el número de línea.
Will no funciona en IE, la propiedad 'lineNumber' no existe en los objetos de error. Tampoco 'stack' :-) –
hay un número de línea en IE. Lo sé porque cuando mi javascript arroja un error, dice que está en una línea con un número superior a 100 millones. – Malfist
en Chome es error.lineno – PanosJee
que puede probar:
window.onerror = handleError;
function handleError(err, url, line){
alert(err + '\n on page: ' + url + '\n on line: ' + line);
}
luego tirar un error en el que desea saber (no desea demasiado, pero podría ayudarle si está depurando
Nota:. window.onerror
no está definido/manejados en WebKit u Opera (última vez que revisé)
Tenga en cuenta que window.onerror no funciona en webkit: https://bugs.webkit.org/show_bug.cgi?id=8519 – Annie
Interesante. Incluso podría crear una función especial 'throwAndResume (resumeFunction);' que almacenaría resumeFunction, arrojaría el error, y en su manejador de errores registrará los detalles y luego llamará a resumeFunction para continuar con su programa. – z5h
Usted puede tratar de analizar una fuente de una función de buscar algunas marcas.
Aquí está un ejemplo rápido (sí, es un poco en mal estado).
function foo()
{
alert(line(1));
var a;
var b;
alert(line(2));
}
foo();
function line(mark)
{
var token = 'line\\(' + mark + '\\)';
var m = line.caller.toString().match(
new RegExp('(^(?!.*' + token + '))|(' + token + ')', 'gm')) || [];
var i = 0;
for (; i < m.length; i++) if (m[i]) break;
return i + 1;
}
inyectar el siguiente fragmento de código:
console.debug("line:", /\(file:[\w\d/.-]+:([\d]+)/.exec(new Error().stack)[1]);
Un poco más portable entre diferentes navegadores y versiones de navegadores (debería funcionar en Firefox, Chrome y IE10 +):
function ln() {
var e = new Error();
if (!e.stack) try {
// IE requires the Error to actually be throw or else the Error's 'stack'
// property is undefined.
throw e;
} catch (e) {
if (!e.stack) {
return 0; // IE < 10, likely
}
}
var stack = e.stack.toString().split(/\r\n|\n/);
// We want our caller's frame. It's index into |stack| depends on the
// browser and browser version, so we need to search for the second frame:
var frameRE = /:(\d+):(?:\d+)[^\d]*$/;
do {
var frame = stack.shift();
} while (!frameRE.exec(frame) && stack.length);
return frameRE.exec(stack.shift())[1];
}
Gracias. He adaptado su sugerencia a esto: http://stackoverflow.com/a/37081135/470749 – Ryan
Si ajusta la expresión regular, puede devolver los números de línea y columna: 'var frameRE = /: (\ d +: \ d +) [^ \ d] * $/; 'que es mucho más útil, particularmente cuando el JS se reduce a una sola línea larga. –
puede usar
function test(){
console.trace();
}
test();
Con mucho, la solución más simple e incluso funciona en MS Edge. – Danger
Si su código es Javascript + PHP, entonces el número de línea actual de PHP está disponible en javascript como una constante literal, ya que está disponible en PHP como <?= __LINE__ ?>
(Eso suponiendo que tiene las etiquetas cortas PHP habilitado, obviamente.)
Así por ejemplo, en javascript que se puede decir:
this_php_line_number = <?= __LINE__ ?>;
sin embargo, si no se tiene cuidado, el número de línea de PHP puede ser diferente del número de línea de javascript, porque PHP "come" líneas de código antes de que el navegador lo ve ellos. Entonces, el problema es asegurarse de que sus números de línea PHP y JavaScript sean los mismos. Si son diferentes, el uso del depurador de JavaScript del navegador es mucho menos agradable.
Puede asegurarse de que los números de línea sean los mismos al incluir una instrucción PHP que escriba el número correcto de líneas nuevas necesarias para sincronizar los números de línea del lado del servidor (PHP) y del lado del navegador (javascript).
Esto es lo que se ve mi código como:
<!DOCTYPE html>
<html lang="en">
<!-- Copyright 2016, 2017, me and my web site -->
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, user-scalable=yes">
<?php
...lottsa PHP stuff here, including all PHP function definitions ...
echo str_repeat("\n",__LINE__-6); # synchronize PHP and Javascript line numbers
?>
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->
<title>My web page title</title>
...lottsa HTML & Javascript stuff here...
</body>
</html>
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->
La clave es esta declaración PHP:
echo str_repeat("\n",__LINE__-6);
Eso es escupe suficientes saltos de línea para hacer el número de línea vista por javascript sea el mismo que el Número de línea PHP. Todas las definiciones de función PHP, etc. están en la parte superior, delante de esa línea.
Después de esa línea, restrinjo el uso de PHP a un código que no cambia los números de línea.
El "-6" representa el hecho de que mi código PHP comienza en la línea 8. Si inicia su código PHP anteriormente, reducirá ese número. Algunas personas ponen su PHP justo en la parte superior, incluso antes del DOCTYPE.
(La línea de visualización meta desactiva Android Chrome "font impulsar" por este stackoverflow Q & A:.. Chrome on android resizes font Consideramos que es repetitivo, que todas las páginas web de las necesidades)
La siguiente línea es sólo para verificar que no he cometió un error Visto de depurador del navegador, o haciendo clic con el botón/Parada en página web, se convierte en un comentario HTML que muestra el nombre correcto archivo de origen y número de línea:
<!-- *** this is line <?php echo __LINE__ . ' of ' . basename(__FILE__); ?> *** -->
se convierte en:
<!-- *** this is line 1234 of my_file.php *** -->
Ahora, donde sea que vea un número de línea, ya sea en un mensaje de error o en el depurador de JavaScript, es correcto. Los números de línea de PHP y los números de línea de JavaScript son siempre consistentes e idénticos.
- 1. ¿Cómo obtener el número de línea actual?
- 2. número de línea actual en Lua
- 3. ¿Cómo puedo determinar el número de elementos en ThreadPool cola
- 4. ¿Cómo puedo determinar el nombre del directorio actual en R?
- 5. Manejo de excepciones de JavaScript: muestra el número de línea
- 6. ¿Cómo determinar el IME actual en Android?
- 7. Resaltando el número de línea actual en vim
- 8. ¿Cómo puedo desactivar el resaltado de línea actual en Netbeans?
- 9. ¿Determinar si el valor de JavaScript es un "número entero"?
- 10. ¿Cómo puedo determinar el tipo de elemento HTML en JavaScript?
- 11. ¿Determinar el HINSTANCE actual?
- 12. VI Expresiones regulares - Sustituir usando el número de línea actual
- 13. ¿Cómo puedo determinar la excepción actual en un bloque catch (...)?
- 14. ¿Cómo determinar el número de bits similares?
- 15. ¿Cómo puedo redondear un número en Javascript?
- 16. ¿Cómo puedo obtener el nombre del directorio actual en Javascript?
- 17. Número de línea actual de un System.Xml.XmlReader (C# & .Net)
- 18. ¿Cómo determinar el archivo, la función y el número de línea?
- 19. Asignación de número de línea de Javascript
- 20. ¿Cómo determinar una 'altura de línea' usando Javascript (jQuery)?
- 21. ¿Cómo puedo determinar SelectedValue de RadioButtonList en JavaScript?
- 22. Obtener número de página actual en InDesign CS5 de Javascript
- 23. ¿Cómo determinar el número de tarjetas SIM en un dispositivo?
- 24. Javascript eval() Excepción - número de línea
- 25. ¿Cómo puedo imprimir el número de línea de origen en Perl?
- 26. ¿Cómo puedo eliminar la línea actual en Emacs?
- 27. ¿Cómo obtener el número de puerto actual en Flask?
- 28. ¿Cómo determinar el mejor número de subprocesos en Tomcat?
- 29. ¿Cómo encontrar el número de línea del cursor en Python?
- 30. ¿Cómo puedo determinar el ángulo del dispositivo?
Posible duplicado de [¿Cómo obtener el número de línea de la función de llamante de JavaScript? ¿Cómo obtener la URL de origen del llamador de JavaScript?] (Http://stackoverflow.com/questions/1340872/how-to-get-javascript-caller-function-line-number-how-to-get-javascript- calller) –