假设我想在GTK中使用WebKitWebView
来显示一些静态HTML页面。这些页面使用自定义URL方案,我们称之为custom://
。此方案表示在生成HTML时其位置未知的本地文件。我所做的是连接到webview的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
信号。
在我看来应该有一些方法来为Webkit注册自定义URL方案的处理程序。这可能吗?
答案 0 :(得分:5)
我对WebKit的Chromium端口比较熟悉,但我相信您可能需要使用webkit_web_resource_get_uri
(请参阅webkitwebresource.h)来处理图像等资源。
答案 1 :(得分:2)
In WebKit GTK 2, there is a more official route for this:
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);
}