네이버 자마린 카페에 관련 질문이 있어서 거기다 쓰려다가 닷넷데브 활성화 시켜보자는 마음으로 여기다가 씁니다.
먼저 안드로이드 기준에서 설명 드리면 커스텀 렌더러 구현이 필요합니다.
(iOS는 구글에 샘플이 몇 개 있으니 그건 찾아보시는걸로!!)
원래는 로그캣에는 뜨긴 뜨는데 웹사이트에서 별도로 브릿지를 구성해서 값을 가져오는 방식이 좀 부담스럽고 특정한 서비스에서 콘솔 로그만 제공해야 되는 경우도 분명히 있을거라 생각은 됩니다.
이럴 땐 WebChromeClient를 커스텀해서 OnConsoleMessage를 오버라이드 하시면 되겠습니다.
테스트하면서 몇 개 필요 없는 구문도 샘플에 있긴한데 WebChromeClient 구현만 잘 해주시면 됩니다
[assembly: ExportRenderer(typeof(Xamarin.Forms.WebView), typeof(HoneyheadRenderer))]
namespace LOGCAT.Droid
{
public class HoneyheadRenderer : WebViewRenderer
{
static Xamarin.Forms.WebView _xwebView = null;
public HoneyheadRenderer(Android.Content.Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
_xwebView = e.NewElement as Xamarin.Forms.WebView;
global::Android.Webkit.WebView.SetWebContentsDebuggingEnabled(true); //원격 디버깅 할때 필요
if (e.OldElement == null)
{
Control.SetWebViewClient(new ConsoleDebugWebviewClient());
}
}
class ConsoleDebugClient : WebChromeClient
{
public override bool OnConsoleMessage(ConsoleMessage consoleMessage)
{
if (consoleMessage.Message() != null)
{
System.Diagnostics.Debug.WriteLine(consoleMessage.Message().ToString());
}
return base.OnConsoleMessage(consoleMessage);
}
public override void OnConsoleMessage(string message, int lineNumber, string sourceID)
{
//System.Diagnostics.Debug.WriteLine(message);
base.OnConsoleMessage(message, lineNumber, sourceID);
}
}
class ConsoleDebugWebviewClient : WebViewClient
{
public async override void OnPageFinished(Android.Webkit.WebView view, string url)
{
try
{
if (_xwebView != null)
{
view.Settings.JavaScriptEnabled = true;
view.Settings.DomStorageEnabled = true;
view.Settings.AllowContentAccess = true;
view.SetWebChromeClient(new ConsoleDebugClient());
}
base.OnPageFinished(view, url);
}
catch (Exception ex)
{
Console.WriteLine($"{ex.Message}");
}
}
}
}
}