簡體   English   中英

QWebEngineView請求主體攔截

[英]QWebEngineView request body interception

在我的應用程序中使用QWebEngineView的用戶填寫了一些表格。 此表單使用發布方法將數據提交到服務器。 如何從用戶的身體要求中獲取參數?

我發現了QWebEngineUrlRequestInterceptor之類的東西,但它僅適用於URL。

您可以使用QWebEnginePage :: acceptNavigationRequest

只要提交表單,就可以使用JavaScript獲取輸入內容,然后接受請求以照常進行。

就像Anmol Gautam所說的那樣,您需要重新實現QWebEnginePage :: acceptNavigationRequest函數並使用JavaScript獲取所需的數據。

這是一個示例如何做:

mywebpage.h

#include <QWebEnginePage>

class MyWebPage : public QWebEnginePage
{
    Q_OBJECT
public:
    explicit MyWebPage(QWebEngineProfile *profile = Q_NULLPTR, QObject *parent = Q_NULLPTR);

protected:
    bool acceptNavigationRequest(const QUrl & url, QWebEnginePage::NavigationType type, bool isMainFrame);
}

mywebpage.cpp

MyWebPage::MyWebPage(QWebEngineProfile *profile, QObject *parent):QWebEnginePage(profile, parent),
{
//...
}

bool MyWebPage::acceptNavigationRequest(const QUrl & url, QWebEnginePage::NavigationType type, bool isMainFrame)
{
    if(type == QWebEnginePage::NavigationTypeFormSubmitted)
    {
        qDebug() << "[FORMS] Submitted" <<  url.toString();
        QString jsform = "function getformsvals()"
                         "{var result;"
                          "for(var i = 0; i < document.forms.length; i++){"
                         "for(var x = 0; x < document.forms[i].length; x++){"
                         "result += document.forms[i].elements[x].name + \" = \" +document.forms[i].elements[x].value;"
                         "}}"
                         "return result;} getformsvals();";

        this->runJavaScript(jsform, [](const QVariant &result){ qDebug() << "[FORMS] found: " << result; });
    }
    return true;
}

在調用WebViews加載函數之前,請使用QWebEngineView :: setPage將WebPage子類設置為WebView。

這是有關HTML DOM表單集合的更多信息的鏈接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM