Как работает функция-член setFeaturePermission в QWebEnginePage?

Я использую 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();
}

Что не так с моим кодом?

1

Решение

Согласно официальной документации Qt для QWebEnginePage::setFeaturePermission:

Замечания: Вызовите этот метод на 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)));
}

Я протестировал этот пример на одном из веб-сайтов захвата звука. Когда этот сайт запрашивает разрешение на доступ к микрофону, по отладочной печати видно, что слот сработал. Он печатает URL сайта и 2 соответствует QWebEnginePage::MediaAudioCapture, Ничего не происходит, если разрешение не предоставлено. Однако после звонка setFeaturePermission в этом слоте все работает как положено. Веб-сайт может захватывать аудио.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]