2017-11-02 4 views
0

웹킷 - 샤프에서 가까운 웹 - 뷰와 콘솔 - 메시지 신호를 캡처하는 방법을 알아 내려고 노력했습니다. (불행히도 우분투 16.04에서 사용 가능한 webkitsharp를 사용해야합니다. 포장).웹킷 - 샤프에서 콘솔 메시지 캡처하기

나는이 작업을했다고 생각했지만, 그렇지 않은 것 같습니다. 나는 또한 정의 ConsoleSignalArgs이

public class MyWebView : WebKit.WebView 
{ 
    [Signal("console-message")] 
    public event ConsoleSignalHandler ConsoleMessage { 
     add { 
     Signal signal = Signal.Lookup(this, "console-message", typeof(ConsoleSignalArgs)); 
     signal.AddDelegate(value); 
     } 
     remove { 
     Signal signal = Signal.Lookup(this, "console-message", typeof(ConsoleSignalArgs)); 
     signal.RemoveDelegate(value); 
     } 
    } 
} 

:

첫째,이 웹보기 클래스를 겹쳐 그때 내 웹의 인스턴스를

public delegate void ConsoleSignalHandler(object o, ConsoleSignalArgs e); 

:

public class ConsoleSignalArgs : SignalArgs { 

    public String Source { 
     get { 
      return (String)base.Args [3]; 
     } 
    } 

    public Int32 Line { 
     get { 
      return (Int32)base.Args [2]; 
     } 
    } 

    public String Message { 
     get { 
      return (String)base.Args [1]; 
     } 
    } 
} 

그리고 ConsoleSignalHandler로 정의 이 이벤트를보고 첨부하지만 아무 일도 일어나지 않습니다. 콘솔에서 메시지를 볼 수있게되면서 콘솔 메시지가 전송되고 있음을 알 수 있습니다.하지만이 코드는 WebView 자체에서 본 것입니다.

private void CreateWebView() { 
    this.m_webView = new MyWebView(); 

    this.m_webView.Editable = false; 
    this.m_webView.TitleChanged += (o, e) => { 
     this.Title = "Title Changed Got Fired!"; 
    }; 
    this.m_webView.ConsoleMessage += (sender, e) => { 
     Console.WriteLine("Console Message Got Here!"); 
        Debug.WriteLine("Got Here!"); 
    }; 
} 

내가 뭘 잘못하고 있니?

부록 : 디버거에서 코드를 중지하고 "신호"속성을 처리하면 NullReferenceException이 throw됩니다.

답변

0

발견. 익명의 대표자가 일부 신호로는 작동하지 않는다는 것이 드러났습니다. 이 참고 올바른 해결책이었다

this.m_webView.ConsoleMessage += new ConsoleSignalHandler(this.ConsoleMessage); 

...

[ConnectBefore] 
private void ConsoleMessage(System.Object sender, ConsoleSignalArgs e) { 
    Console.WriteLine("Console Message got Here!"); 
}