1

我遇到了一个问题,我将尝试清楚地解释。我在一种嵌入式应用程序中使用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)添加一个连接到信号“download-requested”的连接器来处理下载:

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;
}
4

1 回答 1

1

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

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

如果您想要一个文件选择器来选择保存下载的位置,请使用GtkFileChooser,当您完成它时,使用gtk_file_chooser_get_uri().

于 2013-10-18T05:50:42.760 回答