Capturar console.log dentro de una UIWebView

Estoy escribiendo una aplicación de iOS con MonoTouch que hace alguna interacción de javascript con una UIWebView. Para propósitos de debugging, sería bueno poder "capturar" console.log en el javascript que se ejecuta en el UIWebView junto con el rest de la salida de la aplicación. es posible? Los ejemplos que usan el código Objective-C regular también están bien.

Después de search algo más en Google, surgió esta respuesta: Javascript console.log () en iOS UIWebView

Convertirlo en MonoTouch produce esta solución:

 using System; using System.Web; using System.Json; using MonoTouch.UIKit; namespace View { public class JsBridgeWebView : UIWebView { public object BridgeDelegate {get;set;} private const string BRIDGE_JS = @" function invokeNative(functionName, args) { var iframe = document.createElement('IFRAME'); iframe.setAttribute('src', 'jsbridge://' + functionName + '#' + JSON.stringify(args)); document.documentElement.appendChild(iframe); iframe.parentNode.removeChild(iframe); iframe = null; } var console = { log: function(msg) { invokeNative('Log', [msg]); } }; "; public JsBridgeWebView () { ShouldStartLoad += LoadHandler; LoadFinished += (sender, e) => { EvaluateJavascript(BRIDGE_JS); }; } public bool LoadHandler (UIWebView webView, MonoTouch.Foundation.NSUrlRequest request, UIWebViewNavigationType navigationType) { var url = request.Url; if(url.Scheme.Equals("jsbridge")) { var func = url.Host; if(func.Equals("Log")) { // console.log var args = JsonObject.Parse(HttpUtility.UrlDecode(url.Fragment)); var msg = (string)args[0]; Console.WriteLine(msg); return false; } return true; } } } } 

Ahora todas las sentencias de UIWebView en javascript en un UIWebView se enviarán a Console.WriteLine . Esto, por supuesto, podría extenderse a cualquier tipo de resultado que uno quisiera.

¿Puedes agregar código javascript que haga algo así para sobrescribir el método:

 console.log = function(var text) { consoleforios += text; } 

Luego, desde la vista web, llame a:

 string console = webView.EvaluatingJavaScript("return consoleforios;"); 

Esto podría no ser algo que me gustaría dejar en forma permanente, pero debería funcionar.