/** * mock window's console methods(log,info,warn,debug,error) and window.onerror */ function mockedMethodList () { const methodList = ['log', 'info', 'warn', 'debug', 'error']; return methodList; } //mock console methods function mockConsole() { if(window.adhOriginConsole) { return; } window.adhOriginConsole = {}; var methodList = mockedMethodList(); if(!window.console) { window.console = {}; }else { //save origin method methodList.map(function (method) { window.adhOriginConsole[method] = window.console[method]; }); } methodList.map(method => { window.console[method] = (...args) => { printLog({ logType: method, logs: args }); }; }); } function mockWindowError() { if(window.adhOriginOnError) { return } if(window.onerror) { window.adhOriginOnError = window.onerror; } window.onerror = printError; } function restoreWindowError() { window.onerror = window.adhOriginOnError; } /** * @param {String} errorMessage * @param {String} scriptURI * @param {Long} lineNumber * @param {Long} columnNumber * @param {Object} errorObj */ function printError(errorMessage, scriptURI, lineNumber,columnNumber) { var content = ''; content += 'message: ' + errorMessage + '
'; content += 'scriptURI: ' + scriptURI + '
'; content += 'line: ' + lineNumber + '
'; content += 'column: ' + columnNumber; console.error(content); } //restore console methods function restoreConsole() { var methodList = mockedMethodList(); methodList.map(function (method) { window.console[method] = window.adhOriginConsole[method]; }); } //mocked log function printLog(item) { var logType = item.logType; let logs = item.logs || []; if (!logs.length) { return; } var content = ''; for (let i = 0; i < logs.length; i++) { var value = logs[i]; if (typeof(value) == "undefined") { result = "undefined"; }else if (!value && value!=0) { result = "null"; }else if(typeof(value) == 'object'){ if(logs.length == 1) { result = JSON.stringify(value,null,4); }else { result = JSON.stringify(value,null); } }else { result = value.toString(); } content += result; } var data = {}; data['logType'] = logType; data['content'] = content; // data['date'] = new Date().toString(); //webkit if(window.webkit) { if(window.webkit.messageHandlers.wkwebviewjsHandler) { window.webkit.messageHandlers.wkwebviewjsHandler.postMessage(data); } } //uiwebview if(window.webviewjsHandler) { webviewjsHandler(data); } } function adhMock() { mockConsole(); mockWindowError(); } adhMock();