2

我正在使用以下代码来覆盖该函数,因为我只想在返回console.log时打印。console.logshowConsoletrue

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 *): 委托 (webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:) 等待 10 秒后未能返回。主运行循环模式:kCFRunLoopDefaultMode

在日志中。

我怎样才能做到这一点?

4

1 回答 1

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'});
于 2013-08-12T15:04:12.687 回答