2

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

我在 Linux 上使用 QT5.10。

我将在具有只读文件系统的嵌入式环境中使用它,并且我需要防止 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();
}
4

2 回答 2

2

试试这个配置:

首先,禁用任何可能的cookie。使用setPersistentCookiesPolicy并将其设置为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并使用setPage在您的 QWebEngineView 中设置它,则可以轻松完成此操作:

engineview->setPage(new QWebEnginePage(profile, parent));
于 2017-12-10T22:24:21.053 回答
2

QWebEngineProfile 的默认构造函数的文档指出:

与父级父级构造一个新的非记录配置文件。

非记录配置文件不会在本地机器上留下任何记录,也没有持久数据或缓存。因此,HTTP 缓存只能在内存中,而 cookie 只能是非持久的。尝试更改这些设置将无效。

创建默认值QWebEngineProfile后,将其传递给 aQWebEnginePage并将其设置为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.stackoverflow.com/")));
    view.show();

    return a.exec();
}

运行上述程序时,您应该会看到它出现在标准输出中:

StoragePath: ""
isOffTheRecord: true
于 2017-12-12T06:38:59.037 回答