今回は気になるURLのナビゲーション部分をみてみた。既存の関数を使うだけでは
ナビゲートの横取りはできないようだ。
少なくともFreeBSD用の1.0.1では問題有りだった。
コールバックは
g_signal_connect(G_OBJECT(web_view), "名称",
G_CALLBACK(関数), パラメータのポインタ);
なんだがマクロを使って将来的にはすっきりさせたいところ
コールバックのリストをみるにはAPIリファレンスであたりをつけて
「webkitwebview.cpp」をみるしかなかったが
ロード系はシグナルの「名称」で並べると
load-started
↓
navigation-requested
↓
load-started
↓
load-committed
↓
title-changed
↓
load-progress-changed
↓
load-finished
の順番で呼び出される事が分かった。
このうちvoidじゃないのはnavigation_requestedだけで
g_signal_connect(G_OBJECT(web_view)
, "navigation-requested"
, G_CALLBACK(webkit_navigation_requested_cb)
, NULL);
としてコールバックで
static WebKitNavigationResponse
webkit_navigation_requested_cb(WebKitWebView *web_view, WebKitWebFrame *frame, WebKitNetworkRequest *request)
{
puts(webkit_network_request_get_uri(request));
//return WEBKIT_NAVIGATION_RESPONSE_IGNORE;
return WEBKIT_NAVIGATION_RESPONSE_ACCEPT;
}
と設定できる。今回はユーザーデータをつけなかったが
タブ化した場合は必要だろう。
返り値をACCEPTにするとこの関数の後にそのまま動作する。
IGNOREを選ぶと動作しない。
webkit_network_request_set_uriという関数があり
requestのuriを変更できるのだがここで変更して戻しても何ら影響がなかった。
load-progress-changedは繰り返し呼び出され
progress
というgintの値が渡されるのでパーセント表示ができる。
ナビゲート機能について
POSTでの送信フォームの内容を取得する方法はなく
S-JISだと思うが右クリックでURLは取得できるのにクリックしても反応しないリンクがあったり
ファイルアップロードの処理がおかしかったりとフックしたい所だが
ソースをいじらない範囲ではload-finish後にコンテンツ自体変換するしか無いように感じた。
しかし取得したタイトルをタイトルバーに表示させると
ずいぶんと様になる。