QWebView获取内容类型

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属性让你的链接图片所示。我想你可以在检测类型时相信它的扩展;或者只需下载映像并使用文件签名检测它的类型即可。您可以为此编写代码或使用一些第三方映像库来获取文件类型。

希望这会有所帮助,关注

+0

这只适用于HTML页面?如果我点击一些其他类型的链接,说一个mp3怎么办?如何在这种情况下获得MIME类型? – pafcu 2010-01-15 06:48:50

+0

请参阅我的原始回复的更新 – 2010-01-16 04:11:07