我使用以下代码覆盖console.log
功能,因为我只想在console.log
返回showConsole
时打印true
。
var proxyConsolelog = window.console.log;
console.log=function(msg){
try{
if(Boolean(showConsole))
{
proxyConsolelog(msg);
}
}catch(e){
alert(JSON.stringify(e.message));
proxyConsolelog('ERROR-->>'+e.message);
}
}
proxyConsolelog
行会产生问题,alert(JSON.stringify(e.message));
会给我一个“类型错误”。
我明白了:
void SendDelegateMessage(NSInvocation *):delegate (webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame :)失败 等待10秒后返回。主运行循环模式: kCFRunLoopDefaultMode
在日志中。
我怎样才能做到这一点?
答案 0 :(得分:10)
问题在于,当你调用你的函数时,接收者(this
)不是控制台。
你可以这样做:
var proxyConsolelog = window.console.log.bind(window.console);
如果您需要与IE8(没有bind
)兼容,您可以这样做:
var logFun = window.console.log;
var proxyConsolelog = function(){
logFun.apply(window.console, arguments)
};
var proxyConsolelog = $.proxy(window.console.log, window.console);
获得新功能后,您可以像console.log
:
proxyConsolelog('some', {arg:'uments'});