当我单击QWebView中的链接时,我需要根据该链接的MIME类型执行一些操作。
显然,当我点击链接QWebView试图导航到那里,但如何获得内容类型之后呢?
发布于 2010-01-15 01:29:36
我相信在加载页面之后,您可以通过查看QWebElment的集合来获得加载页面的内容类型。首先,您需要为webview小部件设置loadFinished事件槽。如下所示:
QWebView::connect(ui->webView, SIGNAL(loadFinished(bool)), this, SLOT(on_pageLoad_finished(bool)));每次将页面加载到webview控件中时,都应该执行on_pageLoad_finished方法。在那里,您可以通过webframe对象访问web元素集合。下面是on_pageLoad_finished插槽的可能实现
void MainWindow::on_pageLoad_finished(bool ok)
{
if (!ok) return;
QWebFrame* frame = ui->webView->page()->currentFrame();
if (frame!=NULL)
{
QWebElementCollection collection = frame->findAllElements("meta[http-equiv=content-type]");
foreach (QWebElement element, collection)
{
qDebug() << element.attribute("http-equiv");
qDebug() << element.attribute("content");
}
}
}它应该为加载到应用程序输出的每个新页面转储内容类型。
update0图像链接:
如果用户单击图像,或者只是像这样加载图像,则下划线DOM模型中没有具有内容类型属性的meta元素:
QUrl url("http://www.motociclismo.es/rcs/noticias/2008/10_Oct/0610-bmw-s1000RR-02.jpg");
ui->webView->load(url);但是仍然创建了一些dom对象。对于这个特定的图像,它应该如下所示(您可以通过frame->toHtml获得)。
<html>
<body style="margin: 0px;">
<img style="-webkit-user-select: none; cursor: -webkit-zoom-in; " src="http://www.motociclismo.es/rcs/noticias/2008/10_Oct/0610-bmw-s1000RR-02.jpg" width="426" height="320">
</body>
</html>因此,如果要使用以下代码查询IMG对象:
QWebElementCollection collection0 = frame->findAllElements("img");
foreach (QWebElement element, collection0)
{
QStringList attributesList = element.attributeNames();
foreach (QString attributeName, attributesList)
{
qDebug() << attributeName << ":" << element.attribute(attributeName);
}
}您应该得到以下结果:
"style" : "-webkit-user-select: none; cursor: -webkit-zoom-in; "
"src" : "http://www.motociclismo.es/rcs/noticias/2008/10_Oct/0610-bmw-s1000RR-02.jpg"
"width" : "426"
"height" : "320"src属性为您提供所示图像的链接。我想您可以在检测类型时信任它的扩展名;或者只需下载图像并使用文件签名检测它的类型。您可以为此编写代码,或者使用一些第三方映像库来获取文件类型。
希望这能帮上忙
https://stackoverflow.com/questions/2067281
复制相似问题