Как обработать пользовательскую схему URL в Webkit GTK? - PullRequest
10 голосов
/ 13 июля 2010

Допустим, я хочу использовать WebKitWebView в GTK для отображения некоторых статических HTML-страниц. Эти страницы используют собственную схему URL, назовем ее custom://. Эта схема представляет собой локальный файл, местоположение которого заранее неизвестно во время генерации HTML. Я подключаюсь к сигналу navigation-requested веб-просмотра и делаю это:

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. Это возможно?

Ответы [ 2 ]

5 голосов
/ 13 июля 2010

Я более знаком с портом Chromium WebKit, но я полагаю, что вам может понадобиться использовать webkit_web_resource_get_uri (см. webkitwebresource.h ) для обработки ресурсов, таких как изображения.

2 голосов
/ 21 декабря 2014

В 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);
}
...