重写QWebEnginePage :: acceptNavigationRequest以自定义方案拦截单击的URL

时间:2018-12-14 06:41:36

标签: qt qtwebengine

我想在我的Qt Widgets应用程序中显示一些HTML内容,并且想拦截点击的链接。

因此,我继承了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;
}

0 个答案:

没有答案