QWebView 获取内容类型

Posted

技术标签:

【中文标题】QWebView 获取内容类型【英文标题】:QWebView get content type 【发布时间】:2011-01-05 06:05:41 【问题描述】:

当我点击 QWebView 中的链接时,我需要根据该链接的 MIME 类型执行一些操作。

显然,当我单击链接时 QWebView 会尝试导航到那里,但是在此之后我如何获取内容类型?

【问题讨论】:

【参考方案1】:

我相信您可以在页面加载后通过查看 QWebElment 的集合来获取加载页面的内容类型。首先,您需要为 webview 小部件设置 loadFinished 事件槽。像这样:

QWebView::connect(ui->webView, SIGNAL(loadFinished(bool)), this, SLOT(on_pageLoad_finished(bool)));

on_pageLoad_finished 方法应该在每次页面加载到 webview 控件时执行。在那里,您可以通过 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 模型中没有具有 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"  >
</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 属性为您提供所显示图像的链接。我猜你可以在检测类型时信任它的扩展;或者只是下载图像并使用文件签名检测它的类型。您可以为此编写代码或使用一些 3rd 方成像库来获取文件类型。

希望这会有所帮助,问候

【讨论】:

这仅适用于 HTML 页面吗?如果我点击其他类型的链接,比如 mp3,会怎样?在这种情况下如何获取 MIME 类型?

以上是关于QWebView 获取内容类型的主要内容,如果未能解决你的问题,请参考以下文章

打印整个 QWebView 内容未按预期结果

请求 - 获取内容类型/大小而不获取整个页面/内容

Symbian 获取内容类型?

Azure 逻辑应用 - 获取 Blob 内容 - 设置内容类型

获取文件的 MimeType(内容类型)

从 header() 获取 PHP 内容类型