我正在使用 qt 和 qtWebkit 编写一个应用程序,用于访问 Web 应用程序。在Web 应用程序中,我们有各种需要处理的自定义协议,例如'myprotocol:var1=1&var2=2'。使用此协议时,我的应用程序应该打开另一个程序。如何检测这些自定义协议之一何时被命中?
我已经看到了一些涉及“重新实现 QWebPage::acceptNavigationRequest”的类似问题的答案,但我不知道该怎么做。
还有其他人必须在 qtWebkit 中处理自定义协议吗?
如果您侦听使用以下代码调用插槽的“完成(QNetworkReply *)”信号。您可以从回复中包含的请求中获取协议的 URL。从那里您可以检查它是否是您要启动的协议,如果是,您可以使用QDesktopServices::openUrl(reply->request().url());
.
QString scheme = reply->request().url().scheme();
if (scheme == QLatin1String("mailto")
|| scheme == QLatin1String("myprotocol")) {
QDesktopServices::openUrl(reply->request().url());
}