//////////////////////////////////////////////////////////////////////////////// // Constants //////////////////////////////////////////////////////////////////////////////// var __CFREPORTER_BASE_PARAMETERS = {}; var __CFREPORTER_DEBUGGING = true; var __CFREPORTER_URL = "/append_javascript_log"; var __CFREPORTER_WARNING_DISABLED = "reporter disabled - no HTTP support"; var __CFREPORTER_KEY_APP_VERSION = "app_version"; var __CFREPORTER_KEY_BROWSER_NAME = "browser_name"; var __CFREPORTER_KEY_BROWSER_OS = "operating_system"; var __CFREPORTER_KEY_BROWSER_VERSION = "browser_version"; var __CFREPORTER_KEY_LINE_NUMBER = "line_number"; var __CFREPORTER_KEY_LOAD_STATUS = "load_status"; var __CFREPORTER_KEY_LOCATION = "location"; var __CFREPORTER_KEY_MESSAGE = "message"; var __CFREPORTER_KEY_PLATFORM = "platform"; var __CFREPORTER_KEY_STACK = "stack"; var __CFREPORTER_KEY_TYPE = "type"; var __CFREPORTER_KEY_URL = "url"; var __CFREPORTER_KEY_USER_AGENT = "user_agent"; var __CFREPORTER_KEY_VENDOR = "vendor"; var __CFREPORTER_TYPE_ERROR = "error"; var __CFREPORTER_TYPE_WARNING = "warning"; //////////////////////////////////////////////////////////////////////////////// // Private functions //////////////////////////////////////////////////////////////////////////////// function __cfReporterGetBaseParameters() { var parameters = {}; for (var key in __CFREPORTER_BASE_PARAMETERS) { parameters[key] = __CFREPORTER_BASE_PARAMETERS[key]; } return parameters; } function __cfReporterHandleError(message, url, lineNumber, stack, loadStatus) { var parameters = __cfReporterGetBaseParameters(); parameters[__CFREPORTER_KEY_LOAD_STATUS] = loadStatus; parameters[__CFREPORTER_KEY_TYPE] = __CFREPORTER_TYPE_ERROR; __cfReporterHandleParameter(parameters, __CFREPORTER_KEY_LINE_NUMBER, lineNumber); __cfReporterHandleParameter(parameters, __CFREPORTER_KEY_MESSAGE, message); __cfReporterHandleParameter(parameters, __CFREPORTER_KEY_STACK, stack); __cfReporterHandleParameter(parameters, __CFREPORTER_KEY_URL, url); __cfReporterSend(parameters); } function __cfReporterHandleParameter(parameters, key, value) { if (typeof(value) != "undefined") { value = value.toString(); if (value) { parameters[key] = value.toString(); } } } function __cfReporterHandleWarning(message, loadStatus) { var parameters = __cfReporterGetBaseParameters(); parameters[__CFREPORTER_KEY_LOAD_STATUS] = loadStatus; parameters[__CFREPORTER_KEY_MESSAGE] = message; parameters[__CFREPORTER_KEY_TYPE] = __CFREPORTER_TYPE_WARNING; __cfReporterSend(parameters); } function __cfReporterSend(parameters) { var connection = new CFHTTPConnection(); connection.executeFormRequest(__CFREPORTER_URL, {}, parameters); } //////////////////////////////////////////////////////////////////////////////// // Initialization //////////////////////////////////////////////////////////////////////////////// if (cfHTTPHasConnectionSupport()) { __cfReporterHandleError = cfEventHandlerCreate(__cfReporterHandleError, true); __cfReporterHandleWarning = cfEventHandlerCreate(__cfReporterHandleWarning, true); cfErrorAddOnErrorCallback(__cfReporterHandleError); cfWarningAddOnWarningCallback(__cfReporterHandleWarning); __cfReporterHandleParameter(__CFREPORTER_BASE_PARAMETERS, __CFREPORTER_KEY_APP_VERSION, navigator.appVersion); __cfReporterHandleParameter(__CFREPORTER_BASE_PARAMETERS, __CFREPORTER_KEY_BROWSER_NAME, cfBrowserGetName()); __cfReporterHandleParameter(__CFREPORTER_BASE_PARAMETERS, __CFREPORTER_KEY_BROWSER_VERSION, cfBrowserGetVersion()); __cfReporterHandleParameter(__CFREPORTER_BASE_PARAMETERS, __CFREPORTER_KEY_BROWSER_OS, cfBrowserGetOS()); __cfReporterHandleParameter(__CFREPORTER_BASE_PARAMETERS, __CFREPORTER_KEY_LOCATION, window.location.href); __cfReporterHandleParameter(__CFREPORTER_BASE_PARAMETERS, __CFREPORTER_KEY_PLATFORM, navigator.platform); __cfReporterHandleParameter(__CFREPORTER_BASE_PARAMETERS, __CFREPORTER_KEY_USER_AGENT, navigator.userAgent); __cfReporterHandleParameter(__CFREPORTER_BASE_PARAMETERS, __CFREPORTER_KEY_VENDOR, navigator.vendor); } else { cfWarningTrigger("[reporter]: " + __CFREPORTER_WARNING_DISABLED); }