0

私は楽しみのために Web ブラウザに取り組んでおり、この問題に遭遇しました。

これは機能します:

#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

症状が奇妙で、1 つの説明しか思い浮かびません。それは、まだ webkit-gtk にリンクしているということです。このような単純なコードでは、たまたまリンクの問題に遭遇することはありませんでしたが、もちろん、新しいシグナルも存在しません。

于 2015-01-26T07:46:04.810 に答える