qwebengineepage中的setFeaturePermission成员函数是如何工作的?

How does work setFeaturePermission member function in QWebEnginePage?

本文关键字:工作 何工作 setFeaturePermission 中的 成员 函数 qwebengineepage      更新时间:2023-10-16

我使用的是Qt5.5.0,想知道qwebengineepage::setFeaturePermission是如何工作的?

在这种情况下,我想授予加载的页面媒体音频视频捕获权限,但它不工作:

#include <QtWebEngineWidgets>
int main(int argc, char **argv)
{
    QApplication app(argc, argv);
    QWebEngineView *view = new QWebEngineView();
    view->page()->setUrl(QUrl("http://127.0.0.1:3333/index.html"));
    view->page()->setFeaturePermission(view->page()->url(), QWebEnginePage::MediaAudioVideoCapture, QWebEnginePage::PermissionGrantedByUser);
    view->page()->settings()->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls, true);
    view->page()->settings()->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
    view->show();
    return app.exec();
}

我的代码有什么问题?

根据QWebEnginePage::setFeaturePermission的官方Qt文档:

注:featurePermissionRequested()信号上调用此方法,如仅用于处理未处理的特性请求。设置功能请求之前的权限没有作用。

所以,它只有在请求功能时才有效,例如,这里是基本Qt小部件应用程序的一部分,其中QWebEngineView是在主窗口构造器中创建的,并且页面(QWebEnginePage)的信号featurePermissionRequested连接到适当的插槽:

// slot to handle permission request
void MainWindow::featurePermissionRequested(const QUrl & securityOrigin,
    QWebEnginePage::Feature feature)
{
    // print origin and feature
    qDebug() << securityOrigin << feature;
    // grant permission
    view->page()->setFeaturePermission(view->page()->url(),
        QWebEnginePage::MediaAudioCapture, QWebEnginePage::PermissionGrantedByUser);
}
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // store web view pointer as class the member QWebEngineView *view;
    view = new QWebEngineView();
    // add view widget to 'verticalLayout' added to UI in UI Design
    ui->verticalLayout->addWidget(view);
    // set view page
    view->page()->setUrl(QUrl("https://some_audio_capturing_site"));
    // connect page signal with 'this' object slot
    connect(view->page(),
        SIGNAL(featurePermissionRequested(const QUrl&, QWebEnginePage::Feature)),
        SLOT(featurePermissionRequested(const QUrl&, QWebEnginePage::Feature)));
}
我在一个音频捕获网站上测试了这个例子。当该站点请求麦克风访问权限时,可以通过调试打印看到该插槽被触发。输出与QWebEnginePage::MediaAudioCapture对应的站点URL和2。如果未授予权限,则不会发生任何事情。但是,在该槽中调用setFeaturePermission之后,一切都按预期工作。Web站点能够捕获音频