• QWebEngineView拦截Url请求设置


    QWebEngineView拦截Url请求设置

    QWebEngineUrlRequestInterceptor类提供了一个拦截URL请求抽象基类,可通过实现QWebEngineUrlRequestInterceptor::interceptRequest接口拦截并修改相应的UIL请求,以达到相应需求效果,比如设置“Accept-Language”。

    class TWebEngineUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
    {
        Q_OBJECT
    
    public:
        TWebEngineUrlRequestInterceptor(QObject *parent = Q_NULLPTR);
        void interceptRequest(QWebEngineUrlRequestInfo &info);
    };
    

      拦截接口实现

    TWebEngineUrlRequestInterceptor::TWebEngineUrlRequestInterceptor(QObject *parent)
        : QWebEngineUrlRequestInterceptor(parent)
    {
    }
    
    void TWebEngineUrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info)
    {
        QString strInfo = "";
        switch (info.resourceType())
        {
        case 0:  //Top level page
            strInfo = "ResourceTypeMainFrame"; 
            break;
    
        case 1:  //Frame
            strInfo = "ResourceTypeSubFrame";
            break;
    
        case 2:  //CSS stylesheet
            strInfo = "ResourceTypeStylesheet";
            break;
    
        case 3:  //External script
            strInfo = "ResourceTypeScript";
            break;
    
        case 4:  //Image
            strInfo = "ResourceTypeImage";
            break;
    
        case 5:  //Font
            strInfo = "ResourceTypeFontResource";
            break;
    
        case 6:  //Sub-resource
            strInfo = "ResourceTypeSubResource";
            break;
    
        case 7:  //Plugin object
            strInfo = "ResourceTypeObject";
            break;
    
        case 8:  //Media resource
            strInfo = "ResourceTypeMedia";
            break;
    
        case 9:  //Resource of dedicated worker
            strInfo = "ResourceTypeWorker";
            break;
    
        case 10:  //Resource of shared worker
            strInfo = "ResourceTypeSharedWorker";
            break;
    
        case 11:  //Explicitly requested prefetch
            strInfo = "ResourceTypePrefetch";
            break;
    
        case 12:  //Favicon
            strInfo = "ResourceTypeFavicon";
            break;
    
        case 13: //XML http request
            strInfo = "ResourceTypeXhr";
            break;
    
        case 14: //Ping request
            strInfo = "ResourceTypePing";
            break;
    
        case 15: //Resource of service worker
            strInfo = "ResourceTypeServiceWorker";
            break;
    
        case 16: //Unknown resource
            strInfo = "ResourceTypeUnknown";
            break;
    
        default: 
            strInfo = "Unknown type"; 
            break;
        }
    
        qDebug() << "RequestMethod===" << info.requestMethod() << "
    "
            << "RequestUrl===" << info.requestUrl() << "
    "
            << "RequestType===" << strInfo;
        
        //Set the value of the Accept-Language HTTP request-header.
        info.setHttpHeader("Accept-Language", "zh-CN");
    }
    

      接口调用,通过设置默认QWebEngineProfile属性

    TWebEngineUrlRequestInterceptor *webInterceptor = new TWebEngineUrlRequestInterceptor();
    QWebEngineProfile::defaultProfile()->setRequestInterceptor(webInterceptor);
    

      

    自己的实际代码例子:

    #include "cmywebengineurlrequestinterceptor.h"
    #include "QDebug"
    #include "../../vDownLoadUi/src/vIoDownfile_global.h"
    #include "../../common/common/common.h"
    #include "../../vIoMainUi/src/mainframe.h"
    
    extern MainFrame *g_pMainframe;
    Downfilewidget *g_DownFileDialog1 = NULL;
    extern Downfilewidget *g_DownFileDialog;
    CMyWebEngineUrlRequestInterceptor::CMyWebEngineUrlRequestInterceptor(QObject *parent)
        : QWebEngineUrlRequestInterceptor(parent)
    {
    }
    
    bool CMyWebEngineUrlRequestInterceptor::LoadDownfileUISO()
    {
        CreateObjectPtr CreateObjPtr = NULL;
        ReleaseObjectPtr ReleaseObjPtr = NULL;
        bool z_bRet = InitDllImport("vrvlib/libvDownLoadUi.so", CreateObjPtr, ReleaseObjPtr);
        if (!z_bRet || NULL == CreateObjPtr || NULL == ReleaseObjPtr)
        {
              QMessageBox msgBox;
              msgBox.setText("InitDllImport libvDownLoadUi.so failed.");
              msgBox.exec();
              return false;
        }
    
        g_DownFileDialog1 = (Downfilewidget*)CreateObjPtr("DownLoadUi");
        if (g_DownFileDialog1 == NULL)
        {
            QMessageBox msgBox;
            msgBox.setText("DownLoadUi new failed.");
            msgBox.exec();
            return false;
        }
        return true;
    }
    bool g_test = false;
    
    void CMyWebEngineUrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info)
    {
    //    if (g_test == false)
    //    {
    //        g_test = true;
    //        emit g_MainFrame->signal_ShowDownLoadUI("207830", 2);
    //        //g_DownFileDialog->DownloadFile("207830", 2, 1, 1);
    //    }
    
        QString strInfo = "";
        switch (info.resourceType())
        {
        case 0:  //Top level page
            strInfo = "ResourceTypeMainFrame";
            break;
    
        case 1:  //Frame
            strInfo = "ResourceTypeSubFrame";
            break;
    
        case 2:  //CSS stylesheet
            strInfo = "ResourceTypeStylesheet";
            break;
    
        case 3:  //External script
            strInfo = "ResourceTypeScript";
            break;
    
        case 4:  //Image
            strInfo = "ResourceTypeImage";
            break;
    
        case 5:  //Font
            strInfo = "ResourceTypeFontResource";
            break;
    
        case 6:  //Sub-resource
            strInfo = "ResourceTypeSubResource";
            break;
    
        case 7:  //Plugin object
            strInfo = "ResourceTypeObject";
            break;
    
        case 8:  //Media resource
            strInfo = "ResourceTypeMedia";
            break;
    
        case 9:  //Resource of dedicated worker
            strInfo = "ResourceTypeWorker";
            break;
    
        case 10:  //Resource of shared worker
            strInfo = "ResourceTypeSharedWorker";
            break;
    
        case 11:  //Explicitly requested prefetch
            strInfo = "ResourceTypePrefetch";
            break;
    
        case 12:  //Favicon
            strInfo = "ResourceTypeFavicon";
            break;
    
        case 13: //XML http request
            strInfo = "ResourceTypeXhr";
            break;
    
        case 14: //Ping request
            strInfo = "ResourceTypePing";
            break;
    
        case 15: //Resource of service worker
            strInfo = "ResourceTypeServiceWorker";
            break;
    
        case 16: //Unknown resource
            strInfo = "ResourceTypeUnknown";
            break;
    
        default:
            strInfo = "Unknown type";
            break;
        }
    
    //    qDebug()<< "RequestMethod===" << info.requestMethod() << "
    "
    //        << "RequestUrl===" << info.requestUrl() << "
    "
    //        << "RequestType===" << strInfo;
    
        QString z_TaskSerial = "";
        int z_TaskType = 0;
        //?UserAccount=n2&TaskSerial=1234567&TaskType=1&DownAll=0
        QUrl z_url(info.requestUrl());
        QString z_strUrl = z_url.toString();
        //QString z_strUrl = QString("downloadurl/downfile.html?UserAccount=n2&TaskSerial=1234567&TaskType=1&DownAll=0");
        QString z_strDownloadurl = QString("downloadurl/downfile.html");
    
        if(strstr(z_strUrl.toStdString().c_str(), z_strDownloadurl.toStdString().c_str()))
        {
            qDebug()<<"z_strUrl = "<<z_strUrl;
            QStringList z_StringList = z_strUrl.split(QRegExp("&"));
            QString z_Tmp = z_StringList.at(1);
            z_TaskSerial = z_Tmp.section('=', 1, 1);
            z_Tmp = z_StringList.at(2);
            z_TaskType = z_Tmp.section('=', 1, 1).toInt();
            //LoadDownfileUISO();
            if(g_DownFileDialog != NULL)
            {
                //g_DownFileDialog->DownloadFile(z_TaskSerial, z_TaskType, 1, 1);
                emit g_pMainframe->signal_ShowDownLoadUI(z_TaskSerial, z_TaskType);
                //g_DownFileDialog->DownloadFile("207830", 2, 1, 1);
            }
        }
    
        //Set the value of the Accept-Language HTTP request-header.
    //    info.setHttpHeader("Accept-Language", "zh-CN");
    
        //
        //Blocks this request if shouldBlock is true, so that it will not proceed.
        //This function can be used to prevent navigating away from a given domain, for example.
    //    info.block(true);
    
    }
    

      

    #ifndef CMYWEBENGINEURLREQUESTINTERCEPTOR_H
    #define CMYWEBENGINEURLREQUESTINTERCEPTOR_H
    
    #include <QWebEngineUrlRequestInterceptor>
    
    class CMyWebEngineUrlRequestInterceptor : public QWebEngineUrlRequestInterceptor
    {
        Q_OBJECT
    
    public:
        CMyWebEngineUrlRequestInterceptor(QObject *parent = Q_NULLPTR);
        void interceptRequest(QWebEngineUrlRequestInfo &info);
        bool LoadDownfileUISO();
    };
    
    #endif // CMYWEBENGINEURLREQUESTINTERCEPTOR_H
    

      

        CMyWebEngineUrlRequestInterceptor *webInterceptor = new CMyWebEngineUrlRequestInterceptor();
        QWebEngineProfile::defaultProfile()->setRequestInterceptor(webInterceptor);
    

      

  • 相关阅读:
    NetCore与 NET Framework 不同的地方
    vue学习一
    C#基础
    css基础学习
    多线程相关教程
    IIS 配置网站
    C#控制台项目更改运行文件
    实现一个自适应网页用到的css知识
    如何让手机一直保持流畅
    TCP/IP网路协议复习
  • 原文地址:https://www.cnblogs.com/whwywzhj/p/7865221.html
Copyright © 2020-2023  润新知