从webkit-sharp捕获控制台消息

时间:2017-11-02 20:30:04

标签: c# mono webkit-sharp

我一直试图弄清楚如何在webkit-sharp中捕获来自WebKit的close-web-view和console-message信号(遗憾的是我必须使用Ubuntu 16.04包装上提供的webkitsharp)。

我以为我有这个工作,但似乎我不这样做。

首先,我重写WebView类:

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);
      }
   }
}

我也将ConsoleSignalArgs定义为:

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定义为:

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

然后我实例化我的网络视图并附加到此事件,但没有任何反应。我可以告诉控制台消息正在发送,因为我可以在控制台上看到它们,但是这些消息看起来是来自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!");
    };
}

我做错了什么?

附录:我还注意到,当我在调试器中停止代码并检查“signal”时,属性Handler会抛出NullReferenceException。

1 个答案:

答案 0 :(得分:0)

发现了这个问题。原来匿名代表不使用某些信号。这是正确的解决方案FYI:

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

...

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