21#include <QWebEnginePage>
22#include <QtWebEngineWidgetsVersion>
24#include <QWebEngineRegisterProtocolHandlerRequest>
34 return m_protocolHandlers;
39 if (scheme.isEmpty() || url.isEmpty()) {
42 m_protocolHandlers[scheme] = url;
43 registerHandler(scheme, url);
49 m_protocolHandlers.remove(scheme);
53void ProtocolHandlerManager::init()
57 const QStringList keys = settings.
childKeys();
58 for (
const QString &scheme : keys) {
59 const QUrl url = settings.
value(scheme).toUrl();
60 m_protocolHandlers[scheme] = url;
61 registerHandler(scheme, url);
66void ProtocolHandlerManager::save()
71 for (
auto it = m_protocolHandlers.cbegin(); it != m_protocolHandlers.cend(); ++it) {
72 settings.
setValue(it.key(), it.value());
77void ProtocolHandlerManager::registerHandler(
const QString &scheme,
const QUrl &url)
79 QString urlString = url.toString();
80 urlString.replace(
QL1S(
"%25s"),
QL1S(
"%s"));
82 auto *page =
new QWebEnginePage(
this);
83 connect(page, &QWebEnginePage::loadFinished, page, &QObject::deleteLater);
84 connect(page, &QWebEnginePage::registerProtocolHandlerRequested,
this, [](QWebEngineRegisterProtocolHandlerRequest request) {
87 page->setHtml(
QSL(
"<script>navigator.registerProtocolHandler('%1', '%2', '')</script>").arg(scheme, urlString), url);
void removeProtocolHandler(const QString &scheme)
void addProtocolHandler(const QString &scheme, const QUrl &url)
ProtocolHandlerManager(QObject *parent=nullptr)
QHash< QString, QUrl > protocolHandlers() const
void beginGroup(const QString &prefix)
void remove(const QString &key)
QStringList childKeys() const
QVariant value(const QString &key, const QVariant &defaultValue=QVariant())
void setValue(const QString &key, const QVariant &defaultValue=QVariant())