如何覆盖console.log

时间:2013-08-12 15:03:39

标签: javascript jquery ios cordova

我使用以下代码覆盖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

在日志中。

我怎样才能做到这一点?

1 个答案:

答案 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)
};

当您标记问题时,您也可以使用proxy

var proxyConsolelog = $.proxy(window.console.log, window.console);

获得新功能后,您可以像console.log

一样调用它
proxyConsolelog('some', {arg:'uments'});
相关问题