0

我正在开发一个有趣的网络浏览器并遇到了这个问题。

这有效:

#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() 来读取进度值以显示它。

4

1 回答 1

0

症状很奇怪,我只能想到一种解释:您仍在与 webkit-gtk 链接。使用这样的简单代码,您不会碰巧遇到链接问题,但当然也不会出现新信号。

于 2015-01-26T07:46:04.810 回答