如何在Webkit GTK中处理自定义URL方案?

如何在Webkit GTK中处理自定义URL方案?,webkit,gtk,url-scheme,Webkit,Gtk,Url Scheme,假设我想在GTK中使用WebKitWebView来显示一些静态HTML页面。这些页面使用自定义URL方案,我们称之为custom://。此方案表示在生成HTML时,其位置事先未知的本地文件。我要做的是连接到webview的导航请求信号,并执行以下操作: const gchar *uri = webkit_network_request_get_uri(request); gchar *scheme = g_uri_parse_scheme(uri); if(strcmp(scheme, "c

假设我想在GTK中使用
WebKitWebView
来显示一些静态HTML页面。这些页面使用自定义URL方案,我们称之为
custom://
。此方案表示在生成HTML时,其位置事先未知的本地文件。我要做的是连接到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. */
这似乎很好,除非在
中使用该方案,否则显然这些方案不会通过
导航请求信号


在我看来,应该有某种方法可以向Webkit注册自定义URL方案的处理程序。这可能吗?

我更熟悉WebKit的Chromium端口,但我相信您可能需要使用
WebKit\u web\u resource\u get\u uri
(请参阅)来处理图像等资源。


谢谢,这是我需要的正确方向的指针。为了完整性,答案是连接到webview的
资源请求启动信号,并从该处理程序中使用
webkit\u web\u resource\u get\u uri()
执行操作。(请注意,这仅适用于webkit>=1.1.14。)这是一个更好的答案。
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);
}