Cómo replace console.log

Estoy usando el siguiente código para anular la function console.log , porque quiero imprimir console.log solo si showConsole devuelve 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); } } 

La línea proxyConsolelog crea un problema y alert(JSON.stringify(e.message)); Me está dando un "error de tipo".

Y me sale esto:

void SendDelegateMessage (NSInvocation *): delegate (webView: runJavaScriptAlertPanelWithMessage: initiatedByFrame 🙂 no pudo volver después de esperar 10 segundos. modo de bucle de ejecución principal: kCFRunLoopDefaultMode

en el logging

¿Cómo puedo conseguir esto?

El problema que tienes es que el receptor ( this ) cuando llamas a tu function, no es la console.

Puedes hacerlo :

 var proxyConsolelog = window.console.log.bind(window.console); 

Si necesita ser compatible con IE8 (que no tiene bind ), puede hacer esto:

 var logFun = window.console.log; var proxyConsolelog = function(){ logFun.apply(window.console, arguments) }; 

Cuando etiquetó la pregunta jquery , también puede usar el proxy :

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

Una vez que tenga su nueva function, puede llamarla como console.log :

 proxyConsolelog('some', {arg:'uments'});