Error object dump - inline scripts
by James Greene
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/json2/20121008/json2.min.js"></script>
<div>
<h4>Unthrown Error:</h4>
<pre id="resultsUnthrown"></pre>
</div>
<div>
<h4>Thrown Error:</h4>
<pre id="resultsThrown"></pre>
</div>
<div>
<h4>Error Event:</h4>
<pre id="resultsEvent"></pre>
</div>
<div>
<h4>`window.onerror`:</h4>
<pre id="resultsOnError"></pre>
</div>
CSS
h1, h2, h3, h4, h5, h6, pre {
margin: 0;
padding: 0;
}
pre {
font-size: 8pt;
font-family: monospace;
}
div {
margin-bottom: 15px;
}
}
JavaScript
var allErrorProps = ["name", "message", "fileName", "lineNumber", "columnNumber", "stack", "description", "number", "line", "source", "sourceId", "sourceURL", "file", "filename", "url", "URL", "stackArray", "column", "lineNo", "lineno", "colNo", "colno", "lineNum", "colNum", "columnNum", "col", "char", "code", "time", "date", "timestamp", "timeStamp", "detail", "details", "location", "href"];
function getEnumerableDataProps(obj) {
var props = [];
for (var prop in obj) {
if (obj[prop] != null && typeof obj[prop] !== "function" && !/[A-Z]+(?:_[A-Z]+)*/.test(prop)) {
props.push(prop);
}
}
return props;
}
function forEach(arr, fn) {
for (var i = 0, len = arr.length; i < len; i++) {
fn(arr[i], i, arr);
}
}
function getOnErrorDetails(message, fileName, lineNumber, columnNumber, error) {
var details = {
_name: message.indexOf(":") !== -1 ? message.replace(/^(Uncaught )?([^:]+):[\s\t\r\n]+.+$/, "$2") : "",
_message: message.replace(/^([^:]+):[\s\t\r\n]+(.+)$/, "$2"),
_rawMessage: message,
_fileName: fileName,
_lineNumber: lineNumber,
_columnNumber: columnNumber != null ? columnNumber : "{{undefined}}",
_errorDetails: error != null ? getErrorDetails(error) : "{{undefined}}"
}
return details;
}
function getErrorEventDetails(obj) {
var details = getErrorDetails(obj);
if (details && obj) {
details.error = getErrorDetails(obj.error);
}
return details;
};
function getErrorDetails(obj) {
if (obj == null) {
return "{{undefined}}";
}
var details = {};
forEach(allErrorProps, function (e) {
if (e in obj) {
if (typeof obj[e] === "undefined") {
details[e] = "{{undefined}}";
} else {
details[e] = obj[e];
}
}
});
details._toStringStr = obj.toString();
var rawStr = "" + obj;
if (rawStr !== details._toStringStr)...