如何设置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();
}
答案 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