当我单击 QWebView 中的链接时,我需要根据该链接的 MIME 类型执行一些操作。
显然,当我单击链接时,QWebView 会尝试导航到那里,但是在此之后如何获取内容类型?
当我单击 QWebView 中的链接时,我需要根据该链接的 MIME 类型执行一些操作。
显然,当我单击链接时,QWebView 会尝试导航到那里,但是在此之后如何获取内容类型?
我相信您可以在页面加载后通过查看 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 模型中没有具有 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 属性为您提供所显示图像的链接。我猜你可以在检测类型时信任它的扩展;或者只是下载图像并使用文件签名检测它的类型。您可以为此编写代码或使用一些 3rd 方成像库来获取文件类型。
希望这会有所帮助,问候