Проблема с заголовком QWebEngine - PullRequest
0 голосов
/ 02 апреля 2019

Использование QWebEnginePage для загрузки веб-страниц. Работает очень хорошо, но иногда не работает с определенными URL-адресами и кажется проблемой заголовка. Я не могу понять, какие заголовки отправить, чтобы не получить эту ошибку.

Заголовок:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QApplication>
#include <QWebEnginePage>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    QWebEnginePage *p;
    Ui::MainWindow *ui;
protected slots:
    void getHtml(bool s);
    void textChanged();

signals:


};

#endif // MAINWINDOW_H

Источник

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QApplication>
#include <QWebEnginePage>
#include <QWebEngineSettings>
#include <QWebEngineHttpRequest>

QWebEngineHttpRequest httpR;
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow){
    ui->setupUi(this);
    p = new QWebEnginePage(this);
    httpR.setHeader("Location", "absoluteURI");
    httpR.setUrl(QUrl("https://ca.finance.yahoo.com/quote/AIPT/history?period1=1238597365&period2=1554130165&interval=1d&filter=history&frequency=1d"));
    p->settings()->setAttribute(QWebEngineSettings::AutoLoadImages, false);
    p->settings()->setAttribute(QWebEngineSettings::JavascriptEnabled, true);
    connect(p, SIGNAL(loadFinished(bool)), this, SLOT(getHtml(bool)));
    p->load(httpR);

}


QString html = "";
void MainWindow::getHtml(bool s){
   p->toHtml(
       [this](QString result) {
           html=result;
           this->textChanged();
           qDebug()<<httpR.headers();
    });
}

void MainWindow::textChanged(){
    qDebug()<<html.size();
}

MainWindow::~MainWindow(){
    delete ui;
}

Сообщение об ошибке:

js: нераспознанная директива Content-Security-Policy 'disown-opener'.

js: нераспознанная директива Content-Security-Policy 'disown-opener'.

860801 QVector ( "Location") js: нераспознанная политика безопасности контента директива 'открыватель открывания'.

js: нераспознанная директива Content-Security-Policy 'disown-opener'.

js: нераспознанная директива Content-Security-Policy 'disown-opener'.

js: ресурс https://pagead2.googlesyndication.com/pagead/js/r20190327/r20190131/show_ads_impl.js был предварительно загружен с использованием предварительной загрузки ссылки, но не использовался в течение нескольких секунд из события загрузки окна. Пожалуйста, убедитесь, что это Пожалуйста, убедитесь, что это имеет соответствующее значение в качестве, и он преднамеренно предварительно загружен.

1 Ответ

0 голосов
/ 12 апреля 2019

Так что я наконец понял это. Кажется, для исправления "Нераспознанной директивы Content-Security-Policy 'disown-opener'" вы должны будете включить атрибут html-тега "rel = noopener" в каждый тег ссылки , Однако, так как я хочу скачать html-страницы из других источников, было бы немного трудно изменить каждую ссылку.

Вместо некоторых проб и ошибок я обнаружил, что этот заголовок "Upgrade: websocket" , который исправил проблему.

...