переопределение QWebEnginePage :: acceptNavigationRequest для перехвата кликаемого URL с пользовательской схемой - PullRequest
0 голосов
/ 14 декабря 2018

Я хочу отобразить некоторый HTML-контент в своем приложении Qt Widgets, и я хочу перехватывать ссылки, на которые нажали.

Итак, я подкласс QWebEnginePage, чтобы переопределить bool acceptNavigationRequest(const QUrl &, NavigationType, bool).

Вэтот тест я всегда возвращаю false.Метод вызывается для любой ссылки, по которой щелкнули, но только ссылки со схемой http: не уйдут со страницы.Когда я нажимаю ссылку со схемой myapp:, QWebEngineView переходит на пустую страницу.

class MyPage : public QWebEnginePage
{
public:
    explicit MyPage(QObject *parent = nullptr) : QWebEnginePage(parent) {}

protected:
    bool acceptNavigationRequest(const QUrl &url, NavigationType type, bool isMainFrame)
    {
        if(url.scheme() == "data") return true; // allow to load data from setHtml() method
        return false;
    }
};

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString html;
    html += "<html><head></head><body><ul>";
    html += "<li><a href=\"myapp:open/scene.tz\">scene download link (custom scheme)</a></li>";
    html += "<li><a href=\"http://www.myapp.com/open/scene.tz\">scene download link (http)</a></li>";
    html += "</ul></body></html>";

    ui->webView->setPage(new MyPage(this));
    ui->webView->page()->setHtml(html);
}

MainWindow::~MainWindow()
{
    delete ui;
}
...