У меня есть простое приложение 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.
Я бы заблокировал запрос используя QWebEngineUrlRequestInfo :: блок и загрузить локальный файл в QWebEngineView (даже читать локальный файл на лету и передавать его содержимое на просмотр через QWebEngineView :: setHtml).
Или локально прослушивайте входящие HTTP-запросы, используя local dir в качестве корневого веб-узла, и, в конце концов, перенаправляйте на localhost, когда это необходимо, что подразумевает использование внешнего веб-сервера или создание минимального сервера, возможно, встроенного в ваше приложение. Если вы пойдете на его интеграцию, я бы рассмотрел это: https://github.com/cesanta/mongoose.
Других решений пока нет …