11

WebKitWebViewいくつかの静的な HTML ページを表示するために GTK でa を使用したいとしましょう。これらのページは、カスタム URL スキームを使用しますcustom://。このスキームは、HTML が生成された時点では場所が事前にわからないローカル ファイルを表します。私がしていることnavigation-requestedは、webview のシグナルに接続し、これを行うことです。

const gchar *uri = webkit_network_request_get_uri(request);
gchar *scheme = g_uri_parse_scheme(uri); 

if(strcmp(scheme, "custom") == 0) {
    /* DO FILE LOCATING MAGIC HERE */
    webkit_web_view_open(webview, real_location_of_file);
    return WEBKIT_NAVIGATION_RESPONSE_IGNORE;
}
/* etc. */

スキームが<img>タグで使用されていない限り、これはうまくいくようです。たとえば: 、どうやらこれらはシグナル<img src="custom://myfile.png">を通過しないようです。navigation-requested

カスタム URL スキームのハンドラーを Webkit に登録する方法がいくつかあるはずです。これは可能ですか?

4

2 に答える 2

5

私は WebKit の Chromium ポートに精通していますが、画像などのリソースを処理するにはwebkit_web_resource_get_uri( webkitwebresource.hを参照) を使用する必要があると思います。

于 2010-07-13T16:43:57.707 に答える
3

WebKit GTK 2 には、これに対するより公式なルートがあります。

WebKitWebContext *context = webkit_web_context_get_default();
webkit_web_context_register_uri_scheme(context, "custom",
    (WebKitURISchemeRequestCallback)handle_custom,
    NULL, NULL);

/* ... */

static void
handle_custom(WebKitURISchemeRequest *request)
{
    /* DO FILE LOCATING MAGIC HERE */
    GFile *file = g_file_new_for_path(real_location_of_file);
    GFileInputStream *stream = g_file_read(file, NULL, NULL);
    g_object_unref(file);

    webkit_uri_scheme_request_finish(request, stream, -1, NULL);
    g_object_unref(stream);
}
于 2014-12-21T05:27:04.140 に答える