QWebView获取内容类型
问题描述:
当我点击QWebView中的链接时,我需要根据该链接的MIME类型执行一些操作。QWebView获取内容类型
显然,当我点击链接QWebView试图导航那里,但我怎么得到这种内容类型之后呢?
答
我相信你可以通过在加载页面之后查看QWebElment的集合来获取加载页面的内容类型。首先,您需要为webview小部件设置loadFinished事件插槽。像这样:
QWebView::connect(ui->webView, SIGNAL(loadFinished(bool)), this, SLOT(on_pageLoad_finished(bool)));
on_pageLoad_finished方法应该在每次页面加载到webview控件时执行。您可以通过Web框架对象访问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模型的content-type属性没有元元,如果在图像上,或者如果用户点击,您就只需加载它这样:
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属性让你的链接图片所示。我想你可以在检测类型时相信它的扩展;或者只需下载映像并使用文件签名检测它的类型即可。您可以为此编写代码或使用一些第三方映像库来获取文件类型。
希望这会有所帮助,关注
这只适用于HTML页面?如果我点击一些其他类型的链接,说一个mp3怎么办?如何在这种情况下获得MIME类型? – pafcu 2010-01-15 06:48:50
请参阅我的原始回复的更新 – 2010-01-16 04:11:07