爲了解決這個我會用一個簡單的(和真難看和不穩定)適配器延伸的控制檯的功能:
var c = window.console;
window.console = {
debug: function(message) { c.error("(DEBUG)#" + message); },
verbose: function(message) { c.error("(VERBOSE)#" + message); },
error: function(message) { c.error(message); },
warn: function(message) { c.warn(message); },
log: function(message) { c.log(message); },
info: function(message) { c.info(message); }
};
for (i in c) {
try {
window.console[c[i]]();
} catch(error) {
if(verbose) console.verbose("Funktion nicht implementiert: " + c[i]);
window.console[c[i]] = function(arguments) {
if(debug) console.debug("Aufruf nicht implementierter Funktion: " + this);
var funcDefArray = ("" + this).split(" ");
c[funcDefArray[1]](arguments);
};
}
}
該適配器提供了記錄功能而添加前綴(DEBUG)#
或(VERBOSE)#
到消息作爲參數給出,並從原始控制檯對象中調用error()
。希望這將是最少使用的級別,所以這是檢查前綴的傳入消息的地方。 logcat中的希望日誌記錄級別得到由提取前綴選擇:
public class CustomWebChromeClient extends WebChromeClient {
@Override
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
String tag = TAG_JS;
StringBuffer message = new StringBuffer(consoleMessage.message());
MessageLevel lvl = consoleMessage.messageLevel();
if (lvl == MessageLevel.ERROR) {
int i = message.indexOf(")#");
if(i > 0 && i < 8) {
String realLevel = message.substring(1, i);
message.replace(0, i+2, "");
if("DEBUG".equals(realLevel)) lvl = MessageLevel.DEBUG;
else if("VERBOSE".equals(realLevel)) lvl = MessageLevel.TIP;
else tag += " (" + realLevel + ")";
} else {
String source = consoleMessage.sourceId();
source = source.substring(source.indexOf("/js/") + 1);
message.append(source);
message.append('(').append(consoleMessage.lineNumber()).append(')');
message.append(" –> ");
}
}
message.append(consoleMessage.message());
switch (lvl) {
case ERROR:
Log.e(tag, message.toString());
break;
case WARNING:
Log.w(tag, message.toString());
break;
case LOG:
Log.i(tag, message.toString());
break;
case DEBUG:
Log.d(tag, message.toString());
break;
case TIP:
Log.v(tag, message.toString());
break;
default:
Log.println(Log.ASSERT, tag, message.toString());
break;
}
return true;
}
}
我試圖通過原型操縱控制檯的功能,但在這個時候,我沒有這個熟悉獲得工作結果現在。爲了我的目的,這已經足夠,最終其他人可以使用這個廢話。
如果有人願意爲我提供幾條原型,我會很高興,我希望下次我需要這樣的東西時,我可以自己做這件事;)