LINUX.ORG.RU

libWebKitGtk (не загружается файл HTML)

 , ,


1

1

Привет всем!

Кто нибудь знает почему браузер не загружает HTML файл с локального диска , содержащий:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
</head>
<body 
<P><A href="page.html">this page</A></P>
</body>
</html>

СИ код простейший:

static void destroyWindowCb(GtkWidget* widget, GtkWidget* window);
static gboolean closeWebViewCb(WebKitWebView* webView, GtkWidget* window);

int main(int argc, char* argv[])
{
    gtk_init(&argc, &argv);
    GtkWidget *main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(main_window), 800, 600);
    WebKitWebView *webView = WEBKIT_WEB_VIEW(webkit_web_view_new());
    gtk_container_add(GTK_CONTAINER(main_window), GTK_WIDGET(webView));
    g_signal_connect(main_window, "destroy", G_CALLBACK(destroyWindowCb), NULL);
    g_signal_connect(webView, "close", G_CALLBACK(closeWebViewCb), main_window);
    webkit_web_view_load_uri(webView, "file:///home/user/test.html");
    gtk_widget_grab_focus(GTK_WIDGET(webView));
    gtk_widget_show_all(main_window);
    gtk_main();
    return 0;
}

static void destroyWindowCb(GtkWidget* widget, GtkWidget* window)
{
    gtk_main_quit();
}

static gboolean closeWebViewCb(WebKitWebView* webView, GtkWidget* window)
{
    gtk_widget_destroy(window);
    return TRUE;
}

Если у HTML файла убрать тег DOCTYPE , и содержимое тега HTML очистить (то есть убрать xmlns) , то страница грузится.

Похоже я что-то упускаю. Подскажите , как настроить webkit , что-бы он начал отображать такого рода страницы?


У меня в QtWebKit похожая ситуация была с файлами XML и XHTML. В моем случае суть проблемы была в неправильном типе MIME – при загрузке не из интернета содержимому присваивался тип «text/html», а движок браузера не ожидал такого подвоха и отказывался показывать контент. Мне пришлось на основании анализа заголовка устанавливать нужный тип MIME.

Можно попытаться переименовать file:///home/user/test.html в file:///home/user/test.xhtml.

Или сложный путь: написать свою функцию WebKitURISchemeRequestCallback для загрузки локальных файлов и зарегистрировать её при помощи webkit_web_context_register_uri_scheme.

u-235 ()