QWebEngine и QWebChannel: транспортный объект `qt.webChannelTransport` исчез после перезагрузки страницы

Я создал веб-канал между моим приложением и WebEngine, чтобы выставить QObject на веб-странице в JavaScript, но канал теряется после перезагрузки страницы или в случае, если я нажимаю ссылку на другую страницу.

Я думаю, что мне нужно воссоздать канал при перезагрузке страницы, но мне это не удалось. Я пытался сделать это при загрузке страницы, прогрессе и готовых слотах, но получил только js: Uncaught ReferenceError: qt is not defined.

<!-- language: lang-cpp -->
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    ui->webEngineWidget->load(QUrl("qrc:/index.html"));
    page = ui->webEngineWidget->page();

    channel = new QWebChannel;
    channel->registerObject("external", &exposedObject);
    page->setWebChannel(channel);

    connect(page, &QWebEnginePage::loadStarted, this, &MainWindow::onPageLoadStarted);
    connect(page, &QWebEnginePage::loadProgress, this, &MainWindow::onPageLoadProgress);
    connect(page, &QWebEnginePage::loadFinished, this, &MainWindow::onPageLoadFinished);
}

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

void MainWindow::onPageLoadStarted()
{
    qDebug() << "Loading started";
}

void MainWindow::onPageLoadProgress(int progress)
{
    qDebug() << "Loading in progress: " << progress;
}

void MainWindow::onPageLoadFinished()
{
    qDebug() << "Loading finished";
}

Канал создается на стороне страницы с помощью qwebchannel.js:

<h1>Page</h1>
<a href="other.html">Other Page</a>

<script type="text/javascript" src="qrc:///qtwebchannel/qwebchannel.js"></script>
<script>

var webChannel = new QWebChannel(qt.webChannelTransport, function(channel){
    window.external = channel.objects.external;
});

</script>

Полный код примера находится здесь: https://github.com/DanmerZ/QWebChannels-example

Видео: https://monosnap.com/file/ZTOgj1QH06VRVF3ogmXln07eOVXXCW

P.S. Эта ошибка только для Qt5.7, я проверил Qt5.6.1, и канал работает нормально. https://bugreports.qt.io/browse/QTBUG-52209?jql=text%20~%20%22QWebChannel%20reload%22


person Oleh Pomazan    schedule 15.07.2016    source источник


Ответы (1)


Это ошибка, исправление будет в Qt 5.7.1, см. https://bugreports.qt.io/browse/QTBUG-53411 и http://code.qt.io/cgit/qt/qtwebengine.git/commit/?h=dev&id=ca6762abde85fe3104ec4f064b85319474ba2deb

person Sergey Khasanov    schedule 19.07.2016