我一直试图弄清楚如何在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。
答案 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!");
}