В Qt версии 6.9 я написал следующий код для переопределения поведения QWebEnginePage:
Код: Выделить всё
from PyQt6.QtWebEngineCore import QWebEnginePage
from urllib.parse import urlparse
import markdown2
class MyView(QWebEnginePage):
def acceptNavigationRequest(self, qurl, navtype, mainframe) -> bool:
parse_info = urlparse(qurl.url())
if parse_info.scheme.lower() == "file":
if parse_info.path.lower().endswith(".md"):
my_html = markdown2.markdown_path(parse_info.path)
self.setHtml(myhtml,
baseUrl=qurl)
return False
Сегодня моя система обновилась до Qt 6.10. Этот же код теперь приводит к сбою приложения (нет сообщения — код выхода 133). Просмотр страницы «Что изменилось» в Qt 6.10 не проливает никакого света на то, почему - по крайней мере, для меня.
Я могу доказать, что вызов setHTML является причиной сбоя, закомментировав его, и в этом случае приложение «работает» (но отображает необработанную уценку, которая представляет собой просто текст).
Таким образом, вопрос заключается в следующем: как правильно перехватить URL-адрес и заменить содержимое HTML на отображается?
РЕДАКТИРОВАТЬ:
Спасибо @ekhumoro за ссылку и решение.
Я могу подтвердить, что QTimer.singleShot(0, Lambda: self.setHtml(myhtml, baseUrl=qurl)) действительно загружает HTML так, как требуется.
Однако: продолжая разработку, я обнаружил, что подход setHTML имеет ряд недостатков при попытке вставки он используется в том, что должно быть как можно более универсальным окном браузера. В частности, это нарушает историю страницы с точки зрения пользователя. Кроме того, ограничение размера (менее 2 МБ для данных HTML) также налагает ограничения.
Я работаю над альтернативным подходом с использованием JavaScript и веб-каналов - я опубликую здесь полный рабочий пример в комментарии, когда он заработает.
Подробнее здесь: https://stackoverflow.com/questions/798 ... ay-as-html
Мобильная версия