Ответ 1
Я больше знаком с портом Chromium WebKit, но считаю, что вам может понадобиться использовать webkit_web_resource_get_uri
(см. webkitwebresource.h) для обработки таких ресурсов, как изображения.
Скажем, я хочу использовать 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. Возможно ли это?
Я больше знаком с портом Chromium WebKit, но считаю, что вам может понадобиться использовать webkit_web_resource_get_uri
(см. webkitwebresource.h) для обработки таких ресурсов, как изображения.
В 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);
}