#include "webviewwindow.h" #include "webviewqt.h" #include "rktwebview_qt.h" #include #include #include #include void WebviewWindow::processJsEvents() { QWebEnginePage *p = _view->page(); p->runJavaScript("window.getPendingEvents();", [this](const QVariant &v) { QString s = v.toString(); QJsonParseError err; QJsonDocument doc(QJsonDocument::fromJson(s.toUtf8(), &err)); if (err.error == QJsonParseError::NoError) { QJsonArray a = doc.array(); int i, N; for(i = 0, N = a.size(); i < N; i++) { QJsonObject evt = a[i].toObject(); QJsonDocument doc_out(evt); QString msg = doc_out.toJson(QJsonDocument::JsonFormat::Compact); this->_container->triggerJsEvent(_view->id(), msg); } } } ); } void WebviewWindow::closeEvent(QCloseEvent *evt) { _container->removeView(_view->id()); } void WebviewWindow::addView(WebViewQt *v, Rktwebview_qt *c) { _container = c; _view = v; this->setCentralWidget(v); QWebEnginePage *page = _view->page(); connect(page, &QWebEnginePage::loadFinished, this, [this](bool ok) { _container->pageLoaded(_view->id(), ok); }); } WebViewQt *WebviewWindow::view() { return _view; } WebviewWindow::WebviewWindow(QWidget *parent) : QMainWindow{parent} { _view = nullptr; connect(&_process_js_events, &QTimer::timeout, this, &WebviewWindow::processJsEvents); }