如何在Webkit GTK中处理自定义URL方案?
假设我想在GTK中使用如何在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
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);
}