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

2 ответа

Решение

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

Прежде всего, отключите все возможные файлы cookie. Используйте setPersistentCookiesPolicy и установите его в NoPersistentCookies

Если вы можете записать в данную папку, попробуйте сохранить все временные файлы в безопасном хранилище:

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

Это должно дать вам контроль над всеми временными файлами, которые генерируются Web Engine.

Если нет, заглянув в Qt repo, вы увидите, что переменная, управляющая этим состоянием, управляется в 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 по умолчанию гласит:

Создает новый внеплановый профиль с родительским родителем.

Профиль вне записи не оставляет записи на локальном компьютере и не имеет постоянных данных или кэша. Таким образом, кеш 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.stackru.com/")));
    view.show();

    return a.exec();
}

При запуске вышеупомянутого вы должны увидеть это в стандартной форме:

StoragePath: ""
isOffTheRecord: true
Другие вопросы по тегам