如何确定 Qt 5 中 QtWebEngine 在 运行 时使用哪个铬版本?

How to determine which chromium version is used by QtWebEngine in Qt 5 at run-time?

我在 Qt 5 中找不到任何函数来确定 QtWebEngine 使用哪个 chromium 版本。

我不想在我的代码中硬编码 chromium 版本,因为我经常更新我的应用程序并且 chromium 版本通常在每个版本中都会更改。而且 Qt 是向后兼容的,可以在不更新我的应用程序的情况下更新它。

没有直接的解决方法但是看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

如果您 运行 QT 允许 devtools,您可以通过这种方式在开发工具中获得 chrome 版本:

navigator.appVersion.match(/.*Chrome\/([0-9\.]+)/)[1]

这个解决方案来自这个stack overflow answer

您可以使用 runJavaScript method to show a dialog box with the 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。