Как перенаправить QWebEngineUrlRequestInfo в локальные файлы?

У меня есть простое приложение Qt, которое загружает страницу в QWebEngineView, Я хотел бы перенаправить все http-запросы со словом «статические» в URL к локальным файлам. С помощью WebUrlRequestInterceptor Я переопределил interceptRequest метод. Вот код:

class MyWebUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
{
public:
void interceptRequest(QWebEngineUrlRequestInfo &info) {
if (info.requestUrl().toString().contains("static")) {
QString newUrl = QDir::currentPath() + info.requestUrl().toString().mid(21, info.requestUrl().toString().length());
qDebug() << "new url = " << newUrl;
info.redirect(QUrl::fromLocalFile(newUrl));
}
}
};

В основной функции я сделал

MyWebUrlRequestInterceptor *wuri = new MyWebUrlRequestInterceptor();
QWebEngineProfile::defaultProfile()->setRequestInterceptor(wuri);

И interceptRequest Кажется, работает нормально, но я получаю сообщение.

Не разрешено загружать локальный ресурс

Я искал в Интернете, и многие люди говорят, что я должен добавить --disable-web-security флаг. Так я и сделал в своем .pro файл:

QMAKE_CXXFLAGS += --disable-web-security

Но это не похоже на работу. Я делаю что-то неправильно? Есть ли другие решения? Могу ли я создать собственные протоколы для обслуживания локальных файлов и перенаправить их в Qt в качестве обходного пути?

Я использую Qt 5.9.1 и QtCreator 4.3.1.

1

Решение

Я бы заблокировал запрос используя QWebEngineUrlRequestInfo :: блок и загрузить локальный файл в QWebEngineView (даже читать локальный файл на лету и передавать его содержимое на просмотр через QWebEngineView :: setHtml).

Или локально прослушивайте входящие HTTP-запросы, используя local dir в качестве корневого веб-узла, и, в конце концов, перенаправляйте на localhost, когда это необходимо, что подразумевает использование внешнего веб-сервера или создание минимального сервера, возможно, встроенного в ваше приложение. Если вы пойдете на его интеграцию, я бы рассмотрел это: https://github.com/cesanta/mongoose.

1

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

Других решений пока нет …

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