【问题标题】:How does work setFeaturePermission member function in QWebEnginePage?QWebEnginePage 中的 setFeaturePermission 成员函数如何工作?
【发布时间】:2015-10-08 18:40:20
【问题描述】:

我正在使用 Qt5.5.0,想知道QWebEnginePage::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();
}

我的代码有什么问题?

【问题讨论】:

    标签: c++ qt qtwebengine


    【解决方案1】:

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

    注意:在featurePermissionRequested()信号上调用这个方法,因为它 仅用于服务待处理的功能请求。设置功能 请求之前的权限无效。

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

    // 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 后,一切都按预期工作。该网站能够捕获音频。

    【讨论】:

    • 我上次检查时没有看到那个旁注:文档正在发展!大声笑谢谢!当之无愧的赏金..
    • 我想测试页面webrtc.github.io/samples/src/content/getusermedia/…,它基本上使用webrtc进行屏幕共享,但featurePermissionRequested没有发出。可能是什么原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多