scriptfejlfinding - Linje og kolonne i Javascript-fejlbegivenhedsattributter


Jeg har besluttet, at der er nogle fejl, som jeg ikke ønsker skal gå til browserens fejlhåndtering. Men jeg vil stadig gerne vide om dem. I min faktiske kode har jeg en funktion, som gemmer fejlene i et skjult element og sender dem via Ajax til en database. Nedenfor er en forenklet version af min try-blok:

try
{
  newValueEvaled = eval(newValue);
}catch(err)
{
  alert("Error caught: Line " + err.lineNumber + ((err.columnNumber != undefined)?', Column:' + err.columnNumber:"") + '\n' + err.message);
}

Jeg vil også gerne have columnNumber. I øjeblikket er det aldrig der, men på en eller anden måde har browserens fejlkonsol adgang til det. Kan nogen fortælle mig, hvordan jeg også kan få adgang til det?

Svar #1

Jeg er næsten sikker på, at det ikke er muligt at få fejlkollonnenummeret fra JavaScript, der kører på siden. Firebug/WebKit-konsollen/IE-konsollen har adgang til interne browserobjekter, som giver mere information om kaldestakken, end hvad der er tilgængeligt for kode, der kører inde i siden.

Svar #2

Du kan få adgang til fejlens linje og muligvis kolonne ved hjælp af en brugerdefineret fejlbehandlerfunktion:

function dumpErrors(error, file, line, column)
{
    alert('Error: ' + error + ', occurred in file: ' + file + ', on line: ' + line + ', at column: ' + (column || 'unknown'));
}
onerror = dumpErrors;

«Line» er tilgængelig for alle browsere. For «column» ser det ud til, at det er tilgængeligt på den nyeste Chrome (version 30.0+), men ikke på Firefox (version 17, kørende på min Linux).