views:

89

answers:

4

I'm writing a game and I've got a console for developers to interact with JavaScript methods in the game. I have a problem though; I can't figure out how to drop JavaScript errors to the console. Is there anyway to write errors to a div or HTML element?

A: 

Custom defined JavaScript errors are output with the throw command. If you want to input those errors into a div then use the innerHTML method instead of throw and immediately return from the executing function.

A: 

Firebug Lite?

Peter Bailey
Well basically yes. I'd like to know how to make javascript dump its errors to a console exactly the same way firebug does, but into a console element in the page.
Robert Hurst
+5  A: 

It sounds like you already have the ability to execute JS working, and just need to capture error output? If so, you should be able to do so by wrapping your execution code in a try ... catch block:

var result;

try {
    result = eval($("#console-input").val());
} catch (ex) {
    if (ex !== null && typeof ex !== "undefined") {
        if (ex.message) ex = ex.message;
    } else {
        ex = "An unknown error occurred.";
    }

    result = ex;
}

$("#console-output").append($("<p/>").text(result));
$("#console-input").val("");

This will add the result of the code to an output div if no error occurs. If an error does occur, it will instead output either the error message (if any) or "An unknown error occurred."

Ben Blank
+1 better detail than my answer!
Vivin Paliath
awesome thank you very much Ben
Robert Hurst
A: 
konsole = document.createElement('ul');
konsole.id = 'console';
document.getElementsByTagName('body')[0].appendChild(konsole);

    function log(konsole, message, level)
    {
        if (undefined === level) level = 0;
        messageElem = document.createElement('li');
        messageElem.className = 'level-' + level;
        messageElem.innerHTML = message;
        konsole.appendChild(messageElem);
    };


document.getElementById('console')

log(document.getElementById('console'), ': )');

Then it's just about CSS...

Boris Guéry