我正在开发一个有趣的网络浏览器并遇到了这个问题。
这有效:
#include <webkit/webkit.h>
void init() {
GtkWidget *web_view = webkit_web_view_new();
g_signal_connect(
G_OBJECT(GTK_WIDGET(this->web_view)),
"notify::progress",
G_CALLBACK(LoadChangedProxy),
NULL);
webkit_web_view_load_uri(WEBKIT_WEB_VIEW(this->web_view), "http://google.com");
}
void LoadChangedProxy(GtkWidget *view, GParamSpec *pspec, gpointer p) {
puts("LOADING");
}
在这种情况下,永远不会调用回调:
#include <webkit2/webkit2.h>
void init() {
GtkWidget *web_view = webkit_web_view_new();
g_signal_connect(
G_OBJECT(GTK_WIDGET(this->web_view)),
"notify::estimated-load-progress",
G_CALLBACK(LoadChangedProxy),
NULL);
webkit_web_view_load_uri(WEBKIT_WEB_VIEW(this->web_view), "http://google.com");
}
void LoadChangedProxy(GtkWidget *view, GParamSpec *pspec, gpointer p) {
puts("LOADING");
}
我最初试图使用 webkitgtk2 并且真的把我的头撞到了墙上。我切换到较旧的 webkitgtk1 标头和 api,它神奇地开始工作。我不知道什么会导致这种情况,另外没有错误被打印到 stderr 或 stdout(例如,试图连接到一个对象没有的信号)。
有什么建议吗?来自 glib 的关于 g_signal_connect 的文档令人惊讶地少。我所知道的都来自查看一些 gnome 应用程序源代码。
编辑: 我发现在 webkitgtk2 案例中使用“notify::progress”信号标识符,回调有效。但是,我不能使用 webkit_web_view_get_progress() 或 webkit_web_view_get_estimated_load_progress() 来读取进度值以显示它。