JavaScript dispose-t-il d'un mécanisme permettant de déterminer le numéro de ligne de l'instruction en cours d'exécution (et si oui, quel est-il) ?
Réponses
Trop de publicités?
z5h
Points
8029
baligena
Points
1007
jwatt
Points
126
Un peu plus portable entre les différents navigateurs et versions de navigateurs (devrait fonctionner avec Firefox, Chrome et 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];
}
Mikhail Nasyrov
Points
326
Vous pouvez essayer d'analyser la source d'une fonction pour obtenir des notes.
Voici un exemple rapide (oui, c'est un peu brouillon).
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;
}
crishushu
Points
31
- Réponses précédentes
- Plus de réponses
0 votes
Duplicata possible de Comment obtenir le numéro de ligne de la fonction de l'appelant JavaScript ? Comment obtenir l'URL source de l'appelant JavaScript ?