我正在使用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();
}
我的代码出了什么问题?
答案 0 :(得分:3)
根据QWebEnginePage::setFeaturePermission
的官方Qt文档:
注意:在
featurePermissionRequested()
信号上调用此方法 仅用于处理待处理的功能请求。设置功能 请求前的权限无效。
因此,它仅在请求功能时有效,例如,此处是基本Qt Widget应用程序的一部分,其中在主窗口构造函数中创建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)));
}
我在一个音频捕获网站上测试了这个例子。当该站点请求麦克风访问权限时,调试打印可以看到该插槽已被触发。它会打印与2
对应的网站网址和QWebEnginePage::MediaAudioCapture
。如果未授予许可,则不会发生任何事情。但是,在该插槽中调用setFeaturePermission
后,一切都按预期工作。该网站能够捕获音频。