我正在开发一个有趣的网页浏览器并遇到了这个问题。
这有效:
#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(例如,尝试连接到对象没有的信号)。
有任何建议吗? gib上g_signal_connect的文档很少令人惊讶。我所知道的只是看一些gnome应用程序源代码。
修改 我发现在webkitgtk2案例中使用“notify :: progress”信号标识符,回调有效。但是,我不能使用webkit_web_view_get_progress()或webkit_web_view_get_estimated_load_progress()来读取进度值以显示它。
答案 0 :(得分:0)
症状很奇怪,我只能想到一个解释:你仍在使用webkit-gtk链接。像这样的琐碎代码你没有遇到链接问题,但当然新信号也不存在。