Как установить профиль OffTheRecord для QWebEngineView?

Как настроить профиль 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();
}

1

Решение

Попробуйте эту конфигурацию:

Прежде всего, отключите все возможные файлы 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));
1

Другие решения

Документация для 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
1

По вопросам рекламы [email protected]