libaura-webview: Webseiten in AURA

libs/aura-webview bringt das AURA-Element WebView: eine vollwertige Chromium-Seite im Szenengraph, über das Chromium Embedded Framework (CEF). Die Seite ist per Touch bedienbar und spricht über einen WebChannel mit dem C++-Code. Eigenes JavaScript lässt sich in jede Seite einschleusen.

qml
WebView {
    id: page
    url: "https://example.org"
    script: "document.addEventListener('DOMContentLoaded', () => { ... })"
    size: parent.width - 48, parent.height - 104
}

Beispiel und Tests: tests/ui-webview/webview.aura und tests/test_webview.cpp.

Bauen

Option Bedeutung
-DAURA_WITH_WEBVIEW=ON baut libaura-webview, verlinkt sie in aura-view und aura_webview_tests (Preset webview). Standard: OFF.
-DAURA_CEF_ROOT=<dir> nimmt eine entpackte CEF-Distribution, statt sie herunterzuladen
AURA_CEF_VERSION die CEF-Version (Standard 156.0.14, Chromium 156.0.8078.48)

Aufbau

Teil Aufgabe
WebViewNode (aura/webview/webview.h) der Knoten: rendert die Seite, leitet Touch weiter, WebChannel, Skripte
aura-webview-helper die CEF-Unterprozesse (Renderer, GPU, Netzwerk). Im Renderer richtet er window.aura ein und führt die Skripte aus. Das main() der Anwendung bleibt frei von CEF.
aura::ui::registerElementType (aura/ui/elements.h) Elementtypen anderer Bibliotheken für den Loader. aura-ui hängt so nicht von CEF ab.
aura::post() (aura/core/tasks.h) übergibt Arbeit thread-sicher an den UI-Thread. Die Schleife arbeitet sie vor jedem Frame ab, der aura-view-Server bei jeder Anfrage (aura::runPosted()).

WebChannel und Skripte

Jede Seite hat window.aura, schon bevor ihre eigenen Skripte laufen.

js
const sum = await aura.call("add", 2, 3);   // JavaScript -> C++, Promise
aura.on("cart", (value) => render(value));  // C++ -> JavaScript
cpp
#include "aura/webview/webview.h"

dialog->page->handle("add", [](const auto& args) {
	return AuraJson(args[0].toInt() + args[1].toInt());
});
dialog->page->emit("cart", {{"items", 3}});
dialog->page->runJavaScript("document.body.style.zoom = 1.2");
dialog->page->addUserScript("window.kiosk = true;");

Anwendung

cpp
int main(int argc, char** argv)
{
	// vor dem ersten UI-Aufbau: WebView für den Loader;
	// locale: Sprache von Chromium (Standard en-US)
	aura::webview::setup(argc, argv, {.locale = "de"});
	...
	aura::webview::shutdown();  // schließt alle Browser, beendet CEF
}

aura-view initialisiert CEF, wenn es mit WebView gebaut ist (aura::webview setzt dann das Präprozessor-Symbol AURA_WITH_WEBVIEW). Ohne die Bibliothek meldet der Loader „element type 'WebView' is not part of this program“ und nimmt die kompilierte Fassung. Eine Datei mit WebView lässt sich nur kompilieren, wenn das Programm aura::webview linkt.

Vorschau (aura-view, VS Code)

Tests

aura_webview_tests (tests/test_webview.cpp, tests/ui-webview/webview.aura) baut einen Dialog mit WebView einmal kompiliert und einmal über den Loader. Er lädt eine data:-Seite, ohne Netz, und prüft:

Laufzeit und Integration

Dokumentationsquelle: docs/aura-webview.md · Markdown herunterladen

Suche nach Themen, Widgets oder APIs.