(function() { function shouldIgnore(error, url) { var i; var scriptURLs = [ 'https://graph.facebook.com', 'http://connect.facebook.net/en_US/all.js', 'extensions/', 'http://127.0.0.1:4001/isrunning', // Cacaoweb 'http://webappstoolbarba.texthelp.com/', 'http://metrics.itunes.apple.com.edgesuite.net/' ]; for (i = 0; i < scriptURLs.length; i++) { if (url.indexOf(scriptURLs[i]) === 0) { return true; } } var errorsToIgnore = [ 'top.GLOBALS', 'originalCreateNotification', 'canvas.contentDocument', 'MyApp_RemoveAllHighlights', 'http://tt.epicplay.com/', 'Can\'t find variable: ZiteReader', 'jigsaw is not defined', 'ComboSearch is not defined', 'http://loading.retry.widdit.com/', 'atomicFindClose', 'fb_xd_fragment', 'Script error.' ]; for (i = 0; i < errorsToIgnore.length; i++) { if (error.indexOf(errorsToIgnore[i]) > -1) { return true; } } return false; } function displayInConsole(message) { if (window.console && window.console.error) { message = "An error has occured. This data has been sent to the web server:\n" + message; window.console.error(message); } } function sendToServer(message) { var serverLogUrl = '/jsp/log.jsp?message=' + encodeURIComponent(message); if (jQuery) { jQuery.get(serverLogUrl); } else { Image().src = serverLogUrl; } } // Adapted from http://stackoverflow.com/questions/11386492/accessing-line-number-in-v8-javascript-chrome-node-js function getLineNumber(index) { if (Error.captureStackTrace) { var orig = Error.prepareStackTrace; Error.prepareStackTrace = function(_, stack) { return stack; }; var err = new Error; Error.captureStackTrace(err, arguments.callee); var stack = err.stack; Error.prepareStackTrace = orig; try { return stack[index].getLineNumber(); } catch (e) { return -1; } } else { return -2; } } // Adapted from this gist by Pamela Fox: // https://gist.github.com/pamelafox/1878283/c789b4beb4c70d87f1c4ba4668930b1cc3c14c45 function sendError(error, url, lineNum) { var stack, message; if (error.message) { lineNum = lineNum || error.lineNumber || getLineNumber(1); stack = error.stack; error = error.message; } else if (error.target && error.type) { error = error.type; } else if (!error.indexOf) { error = 'Error of unknown type: ' + (typeof error); } url = url || (window.location.href + location.search); lineNum = lineNum || 'None'; if (shouldIgnore(error, url)) { return; } message = 'JS Error:\n' + error + '\n' + 'URL:\n' + url + '\n'; if (lineNum) { message += 'Line:\n' + lineNum + '\n'; } message += 'Document URL:\n' + document.URL + '\n'; message += 'UserAgent:\n' + window.navigator.userAgent + '\n'; if (!stack && window.printStackTrace) { try { stack = printStackTrace().slice(4).join('\n'); } catch(e) {} } if (stack) { message += 'Stacktrace:\n' + stack + '\n'; } displayInConsole(message); sendToServer(message); } window.UU = window.UU || {}; if (!UU.logError) { UU.logError = sendError; } })();