Как настроить профиль OffTheRecord для QWebEngineView?
Я использую 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 и установите его NoPersistentCookies
Если вы можете записать в данную папку, попробуйте сохранить все временные файлы в безопасном хранилище:
auto *profile = QWebEngineProfile::defaultProfile();
profile->setCachePath("yourfolder");
profile->setPersistentStoragePath("yourfolder");
Это должно дать вам контроль над всеми временными файлами, которые генерируются Web Engine.
Если нет, заглянув в репозиторий Qt, вы увидите, что переменная, управляющая этим состоянием, контролируется в BrowserContextAdapter, эта переменная имеет значение false, если путь к хранилищу пуст при создании контекста браузера.
Поэтому, если вы создаете свой собственный QWebEngineProfile с пустой QString в качестве пути и используете его в качестве профиля по умолчанию:
QWebEngineProfile* profile = new QWebEngineProfile(QString(), parent)
std::cout << "isOffTheRecord: " << profile->isOffTheRecord() << std::endl; // Should return true
Это может быть легко сделано, если вы используете его для создания одного QWebEnginePage вручную, используя этот профиль, и установите его в QWebEngineView, используя setPage:
engineview->setPage(new QWebEnginePage(profile, parent));
Документация для QWebEngineProfile’s конструктор по умолчанию состояния:
Создает новый внеплановый профиль с родительским родителем.
Неофициальный профиль не оставляет записи на локальном компьютере, и
не имеет постоянных данных или кеша Таким образом, кеш HTTP может быть только в
память и куки могут быть только непостоянными. Пытаясь изменить
эти настройки не будут иметь никакого эффекта.
После того, как вы создали по умолчанию 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