【发布时间】:2020-09-18 12:12:46
【问题描述】:
我在 Qt 5 中找不到任何函数来确定 QtWebEngine 使用哪个铬版本。
我不想在我的代码中硬编码铬版本,因为我经常更新我的应用程序并且铬版本通常在每个版本中都会更改。而且 Qt 是向后兼容的,可以在不更新我的应用程序的情况下更新它。
【问题讨论】:
标签: qt qt5 chromium qtwebengine
我在 Qt 5 中找不到任何函数来确定 QtWebEngine 使用哪个铬版本。
我不想在我的代码中硬编码铬版本,因为我经常更新我的应用程序并且铬版本通常在每个版本中都会更改。而且 Qt 是向后兼容的,可以在不更新我的应用程序的情况下更新它。
【问题讨论】:
标签: qt qt5 chromium qtwebengine
您可以使用runJavaScript 方法显示带有navigator.userAgent Javascript 变量的对话框,其中包括Chromium 版本:
QWebEngineView webView;
webView.page()->runJavaScript("alert(navigator.userAgent)");
在我的情况下,警告框显示以下内容:
Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.15.1 Chrome/80.0.3987.163 Safari/537.36
查找 Chromium 版本的有趣部分是 Chrome/80.0.3987.163,这意味着 Qt Web 引擎正在使用的 Chromium 版本是 80.0.3987.163。
【讨论】:
如果您在允许 devtools 的情况下运行 QT,您可以通过这种方式在 devtools 中获取 chrome 版本:
navigator.appVersion.match(/.*Chrome\/([0-9\.]+)/)[1]
这个解决方案来自这个stack overflow answer。
【讨论】:
没有直接的解决办法但是看the source code可以看到是用来设置默认用户代理的:
std::string ContentBrowserClientQt::getUserAgent()
{
// Mention the Chromium version we're based on to get passed stupid UA-string-based feature detection (several WebRTC demos need this)
return content::BuildUserAgentFromProduct("QtWebEngine/" QTWEBENGINECORE_VERSION_STR " Chrome/" CHROMIUM_VERSION);
}
因此可以从该数据中提取:
QString version;
QString user_agent = QWebEngineProfile::defaultProfile()->httpUserAgent();
for(const QString & text : user_agent.split(" ")){
if(text.startsWith(QStringLiteral("Chrome/"))){
version = text.mid(QStringLiteral("Chrome/").length());
}
}
qDebug().noquote()<< "Qt version:" << QT_VERSION_STR << "chromium version:" << version;
输出:
Qt version: 5.14.2 chromium version: 77.0.3865.129
【讨论】: