如何为 QWebEngineView 设置 OffTheRecord 配置文件?

How to set OffTheRecord profile for QWebEngineView?

如何为 QWebEngineView 设置 OffTheRecord 配置文件?

我使用 QT5.10 Linux。

我打算在只读文件系统的嵌入式环境中使用它,我需要防止 WebEngine 在文件系统中写入文件和创建文件夹。

#include <QApplication>
#include <QWebEngineView>
#include <QWebEngineSettings>
#include <QWebEngineProfile>

int main(int argc, char *argv[]) {

   QApplication a(argc, argv);
   QWebEngineView view;

   auto profile = view.page()->profile();

   profile->setHttpCacheType(QWebEngineProfile::MemoryHttpCache);
   profile->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies);
   //profile->setPersistentStoragePath(nullptr);

   std::cout << "StoragePath: " << profile->persistentStoragePath().toStdString() << std::endl;
   std::cout << "isOffTheRecord: " << profile->isOffTheRecord() << std::endl;

   profile->settings()->setAttribute(QWebEngineSettings::AllowRunningInsecureContent, true); // Since Qt5.7
   profile->settings()->setAttribute(QWebEngineSettings::XSSAuditingEnabled, false);

   view.setUrl(QUrl(QStringLiteral("http://localhost/index.html")));

   view.resize(1920, 1080);
   view.show();

   return a.exec();
}

试试这个配置:

首先,禁用任何可能的cookie。使用 setPersistentCookiesPolicy and set it to NoPersistentCookies

如果您可以写入给定文件夹,请尝试将所有临时文件保存在安全存储中:

auto *profile = QWebEngineProfile::defaultProfile();
profile->setCachePath("yourfolder");
profile->setPersistentStoragePath("yourfolder");

这应该可以让您控制 Web 引擎生成的所有临时文件。

如果没有,查看Qt repo,可以看到管理这个状态的变量是在BrowserContextAdapter中控制的,这个变量设置为false,如果存储路径为空创建浏览器上下文。

因此,如果您使用空 QString 作为路径创建自己的 QWebEngineProfile 并将其用作默认配置文件:

QWebEngineProfile* profile = new QWebEngineProfile(QString(), parent)
std::cout << "isOffTheRecord: " << profile->isOffTheRecord() << std::endl; // Should return true

如果您使用它来创建任何单个 QWebEnginePage manually using this profile and set it in your QWebEngineView using setPage:

,这可以很容易地完成
engineview->setPage(new QWebEnginePage(profile, parent));

QWebEngineProfile 的 default constructor 文档指出:

Constructs a new off-the-record profile with the parent parent.

An off-the-record profile leaves no record on the local machine, and has no persistent data or cache. Thus, the HTTP cache can only be in memory and the cookies can only be non-persistent. Trying to change these settings will have no effect.

创建默认 QWebEngineProfile 后,将其传递给 QWebEnginePage 并将其设置为 QWebEngineView 中的页面。

下面是一个编译和运行的简单示例(在 Mac OS 上测试):

#include <QApplication>
#include <QWebEngineView>
#include <QWebEngineSettings>
#include <QWebEnginePage>
#include <QWebEngineProfile>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWebEngineView view;
    QWebEngineProfile profile;
    QWebEnginePage page(&profile);

    qDebug() << "StoragePath:" << profile.persistentStoragePath();
    qDebug() << "isOffTheRecord:" << profile.isOffTheRecord();

    view.setPage(&page);
    view.setUrl(QUrl(QStringLiteral("http://www.whosebug.com/")));
    view.show();

    return a.exec();
}

当 运行 上面你应该看到这个出现在标准输出中:

StoragePath: ""
isOffTheRecord: true