Как перенаправить 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.


person madasionka    schedule 10.11.2017    source источник


Ответы (1)


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

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

person p-a-o-l-o    schedule 10.11.2017