如何使用GTK WebKit处理下载?

时间:2013-10-17 12:28:30

标签: c++ webkit gtkmm

我遇到了一个问题,我会尝试解释清楚。我在一种嵌入式应用程序中使用 gtkmm webkit浏览器来访问php / html文件。关键是我无法为此webkit编写处理下载的方法

哦,我用C ++编写代码。

目前下载的文件在我的HTML代码中如下所示:

<a href='excel/template_users.php'><img src='imgs/excelbis.png'/>Download Excel File</a>

“template_users.php”文件只是强制用户下载文件的一种方式(您也可以通过“经典”网络浏览器访问该网站)。它仅包含:

<?php
    header("Content-disposition: attachment; filename=template_users.xls");
    header("Content-type: application/vnd.ms-excel:");
    readfile("template_users.xls");
?> 

我一直试图通过向我的IntegratedBrowser类构造函数(实例化webkit)添加信号“下载请求”的连接器来处理下载:

gboolean ret = FALSE;
g_signal_connect(webView, "download-requested", G_CALLBACK(&IntegratedBrowser::downloadRequested), &ret);

以及相关的方法:

gboolean IntegratedBrowser::downloadRequested(WebKitWebView* webView, WebKitDownload *download, gboolean *handled)
{
    const gchar* dest = webkit_download_get_uri(download);
    webkit_download_set_destination_uri(download, dest);
   return FALSE;
}

我应该确切地说,当我尝试通过“经典网络浏览器”下载文件时,一切都运行良好。 c ++代码编译顺利,但是,当我使用webkit单击链接时没有任何反应。我想在可能的情况下将文件下载到用户选择的位置(将文件下载到特定位置也是可行的),点击链接。

你知道我做错了什么吗?

感谢您的回答!

编辑:现在我的downloadRequested方法看起来像这样:

gboolean IntegratedBrowser::downloadRequested(WebKitWebView* webView, WebKitDownload *download, gboolean *handled)
{
    const gchar* dest = g_strdup_printf("%s", "file:///home/user/test.xls");
    webkit_download_set_destination_uri(download, dest);
    return TRUE;
}

1 个答案:

答案 0 :(得分:0)

return FALSE方法中的IntegratedBrowser::downloadRequested()取消下载。 return TRUE应该启动它。

此外,您正在使用webkit_download_get_uri()(例如http://my.website.com/myfile.jpeg)获取要下载的URI,并将其设置为目标URI。将目标URI设置为指向本地文件(尽管不设置它可能会将文件下载到默认位置。)

如果您想要一个文件选择器来选择保存下载的位置,请使用GtkFileChooser,完成后,使用gtk_file_chooser_get_uri()检索URI。