我一直在试图弄清楚如何在 webkit-sharp 中捕获来自 WebKit 的 close-web-view 和控制台消息信号(不幸的是,我必须使用 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);
然后我实例化我的 web 视图并附加到这个事件,但是没有任何反应。我可以告诉控制台消息正在发送,因为我可以在控制台上看到它们,但是这些看起来来自 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。