我遇到了一个问题,我将尝试清楚地解释。我在一种嵌入式应用程序中使用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;
}