A
June 1, 2020, 2:18 p.m.

Перехват обращения к локальным файлам QWebEngineView

QWebEngineView

Суть задачи - все файлы (html и мультимедиа) хранятся на компьютере в зашифрованном виде, требуется отловить обращение компонента QWebEngineView к локальному файлу и вернуть ему обратно в уже не зашифрованном виде

(код расшифровки есть, но не могу понять, как повесить handler на обращение)

2

Do you like it? Share on social networks!

5
Evgenii Legotckoi
  • June 1, 2020, 3 p.m.

А можете уточнить. Тот файл, путь к которому указывается в url, или вообще всех? В том числе и тех, пути к которым указываются в атрибутах href и src?

    A
    • June 1, 2020, 3:08 p.m.

    Всех (т.е. фото\видео, относительные пути, которых указаны в html и загрузка новой html страницы)

      Evgenii Legotckoi
      • June 1, 2020, 3:26 p.m.

      ха. забавная у вас задачка. То есть вам нужно подменить контент, который загружается через QWebEngineView.
      На входе имеете одно, зашифрованное, а на выходе загрузки делаете на лету дешифровшку и подставляете это во вьюшку.

      Сама по себе загрузка файлов происходит асинхронно в дебрях движка. Ничего удивительного, что вы этого не нашли.

      Есть способ отловить страницу, когда она уже загружена. Только в этом случае движок высылает нужные сигналы.
      Но обработчиков, которые бы давали возможность на лету модифицировать данные нет.

      Тем не менее, имею мысль, что по окончанию загрузки страницы можно запускать JavaScript, который проверит все url на странице, и вы сможете взять все эти url, по ним взять все зашифрованные файлы, временно их расшифровать и сохранить во временный каталог. После чего запустить второй JavaScript, который заменит url на временные.

      Хотя в данном случае пострадает безопасность ваших данных, и вы конечно же не захотите этого делать.

      Но чтобы модифицировать данные на лету, вам очевидно понадобиться изменять исходники самого QWebEngine и хорошо, если только его исходники, а не самого webkit.

        A
        • June 2, 2020, 8:32 a.m.

        В общем решил выложить решение (вдруг кому-то понадобиться, хоть оно и очень странное) - теперь программа поднимает локальный http сервер на и вся логика расшифровки сделана на нем.

          Evgenii Legotckoi
          • June 2, 2020, 1:01 p.m.

          В вашем случае вполне адекватное решение. Так сказать меньше зло.
          В противном случае пришлось бы очень много переписывать и перепиливать.

            Comments

            Only authorized users can post comments.
            Please, Log in or Sign up
            • Last comments
            • Evgenii Legotckoi
              April 16, 2025, 5:08 p.m.
              Благодарю за отзыв. И вам желаю всяческих успехов!
            • IscanderChe
              April 12, 2025, 5:12 p.m.
              Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
            • AK
              April 1, 2025, 11:41 a.m.
              Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
            • Evgenii Legotckoi
              March 9, 2025, 9:02 p.m.
              К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
            • VP
              March 9, 2025, 4:14 p.m.
              Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…