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

时间:2017-12-10 17:18:44

标签: c++ linux qt qt5.10

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

我使用QT5.10 for 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();
}

2 个答案:

答案 0 :(得分:1)

尝试此配置:

首先,禁用任何可能的cookie。使用setPersistentCookiesPolicy并将其设置为NoPersistentCookies

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

 uniqueid |     created_at      |        last_update         |    name    |       effective_from       |        effective_to        | latest_flag
----------+---------------------+----------------------------+------------+----------------------------+----------------------------+-------------
 65617035 | 2017-12-10 00:00:00 | 2017-12-10 09:23:10.735    | TESTING    | 2017-12-10 09:23:10.735    | 2017-12-11 09:23:10.735929 | f
 65617035 | 2017-12-11 00:00:00 | 2017-12-11 09:23:10.735929 | Stargazing | 2017-12-11 09:23:10.735929 |                            | t
(2 rows)

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

如果没有,看看Qt repo,您​​可以看到管理此状态的变量在BrowserContextAdapter中被控制,如果存储路径在创建时为空,则此变量设置为false浏览器上下文

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

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

如果您使用此配置文件手动创建任何单个QWebEnginePage并使用setPage在QWebEngineView中设置它,则可以轻松完成此操作:

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

答案 1 :(得分:1)

QWebEngineProfile的default constructor州的文档:

  

使用父级父级构建新的非正式记录配置文件。

     

非正式记录配置文件不会在本地计算机上留下任何记录,并且   没有持久数据或缓存。因此,HTTP缓存只能在   内存和cookie只能是非持久性的。试图改变   这些设置无效。

创建默认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.stackoverflow.com/")));
    view.show();

    return a.exec();
}

运行上述内容时,您会看到它出现在标准输出中:

StoragePath: ""
isOffTheRecord: true